从对象数组中过滤唯一值

bob*_*zzo 6 javascript

如何使用Array.filter()返回唯一idname

我的场景与我研究的解决方案略有不同,我有一个对象数组.我找到的每个例子都包含一个单值的平面数组.

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" },
];
Run Code Online (Sandbox Code Playgroud)

var unique = data.filter(
function (x, i) {
   return data[i].id.indexOf(x.id) === i
});
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mam*_*mun 16

我认为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);
Run Code Online (Sandbox Code Playgroud)

如果您真的想使用,请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);
Run Code Online (Sandbox Code Playgroud)

  • data = data.reduce((items, item) =&gt; items.find(x =&gt; x.name === item.name) ? [...items] : [...items, item], []) (7认同)
  • @jinglesthula 我的错,只使用第一个三元分支中的项目 (2认同)