这个问题已经在这里有一个答案:
如何使用Array.filter()与id
返回唯一name
?
我的情况是比我已经研究了解决方案,我有对象的数组略有不同。我发现每例子包含单值的平面阵列。
data=[
{id: 555, name: "Sales", person: "Jordan" },
{id: 555, name: "Sales", person: "Bob" },
{id: 555, name: "Sales", person: "John" },
{id: 777, name: "Accounts Payable", person: "Rhoda" },
{id: 777, name: "Accounts Payable", person: "Harry" },
{id: 888, name: "IT", person: "Joe" },
{id: 888, name: "IT", person: "Jake" },
];
var unique = data.filter(
function (x, i) {
return data[i].id.indexOf(x.id) === i
});
提前致谢。
我认为forEach()
是更好地实现你在找什么:
var data=[
{id: 555, name: "Sales", person: "Jordan" },
{id: 555, name: "Sales", person: "Bob" },
{id: 555, name: "Sales", person: "John" },
{id: 777, name: "Accounts Payable", person: "Rhoda" },
{id: 777, name: "Accounts Payable", person: "Harry" },
{id: 888, name: "IT", person: "Joe" },
{id: 888, name: "IT", person: "Jake" },
];
var resArr = [];
data.forEach(function(item){
var i = resArr.findIndex(x => x.name == item.name);
if(i <= -1){
resArr.push({id: item.id, name: item.name});
}
});
console.log(resArr);
如果你真的想用filter()
请尝试以下方法:
var data=[
{id: 555, name: "Sales", person: "Jordan" },
{id: 555, name: "Sales", person: "Bob" },
{id: 555, name: "Sales", person: "John" },
{id: 777, name: "Accounts Payable", person: "Rhoda" },
{id: 777, name: "Accounts Payable", person: "Harry" },
{id: 888, name: "IT", person: "Joe" },
{id: 888, name: "IT", person: "Jake" },
];
var resArr = [];
data.filter(function(item){
var i = resArr.findIndex(x => x.name == item.name);
if(i <= -1){
resArr.push({id: item.id, name: item.name});
}
return null;
});
console.log(resArr);