2017-04-12 6 views
2

Array.filter()を使用して一意のidnameと戻すにはどうすればよいですか?オブジェクトの配列から一意の値をフィルタリングする

私のシナリオは、私がオブジェクトの配列を持っていることを研究しているソリューションと少し異なります。私が見つけたすべての例には、単一の値のフラットな配列が含まれています。

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

事前に感謝

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" }, 
 
];

答えて

3

次のことを試してみてください。

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);

+0

うん、それはそれです!私はforループのために行っていたが、私はフィルターが一番だと思う。 –

+0

なぜ私は結論にすぐにジャンプするのか分かりません。私は検索しましたが、私のシナリオに最適なソリューションは見つかりませんでした。 –

+0

私は、このアプローチが関数内で何も返さないため、フィルタ関数を実際には使用しないので、forEachはより良いと思います。 – theva

関連する問題