具有排序功能的Javascript过滤器功能不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有排序功能的Javascript过滤器功能不起作用相关的知识,希望对你有一定的参考价值。
我有以下格式的一个json
const myData = [{
"A111" : "123"
"name" : "abc",
},
"A222" : "678"
"name" : "xyz",
},
{
"A333" : "456"
"name" : "abc",
},
{
"A444" : "643"
"name" : "abc",
},
{
"A555" : "078"
"name" : "xyz",
}]
const test = {
"123" : "6789",
"456" : "999",
"078" : "1234"
}
现在,我要获取myData中名称为“ abc”的所有数据,并且应该根据第二个对象值对数据进行排序。我认为我们可以根据第二个对象的密钥来做,但是我没有得到。输出应该在对象数组中,该数组将包含来自第一个json的名称和来自第二个对象的值,并将根据第二对象的值进行排序。 。有人可以帮忙吗?提前致谢。对不起,我的英语不好。
答案
让我知道这是否是您需要的东西。
myData = [{ "A111" : "123","name" : "abc", }, {"A222" : "678", "name" : "xyz" }, { "A333" : "456", "name" : "abc", }, { "A444" : "643", "name" : "abc", }, { "A555" : "078", "name" : "xyz", }];
var test = { "123" : "6789", "456" : "999", "643" : "1234"}
var result = myData.filter(val=>val.name=='abc').sort((a,b)=>Object.keys(a)[0] - Object.keys(b)[0]);
// Or in case if you need to sort on the basis of test object
var result2 = myData.filter(val=>val.name=='abc').sort((a,b)=>test[Object.values(a)[0]] - test[Object.values(b)[0]]);
console.log(result);
console.log(result2)
另一答案
您可以尝试这个
myData = [
{ "A111" : "123" ,"name" : "abc" },
{ "A222" : "678" ,"name" : "xyz" },
{ "A333" : "456" ,"name" : "abc" },
{ "A444" : "643" ,"name" : "abc" },
{ "A555" : "078" ,"name" : "xyz" }
];
const test = {
"123" : "6789",
"456" : "999",
"078" : "1234"
}
function filterSort(array,param){
let result=[];
var filtered= array.filter(x=>x.name==param);
filtered.forEach(obj=>{
var keyNames = Object.keys(obj);
keyNames.forEach(key=>{
if(key!="name"){
var el = {};var keya = obj[key];
el[keya] = test[keya]; result.push(el)
}
})
})
return result.sort();
}
console.log(filterSort(myData,"abc"));
以上是关于具有排序功能的Javascript过滤器功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章