2017-04-12 62 views
2

如何使用Array.filter()返回與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 
 
});

在此先感謝。

回答

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

我不明白爲什麼SO跳得很快就得出結論:有重複的答案。我曾經搜索過,但沒有找到適合我的場景的最佳解決方案。 –

+0

我認爲forEach會更好,因爲這種方法實際上並不使用過濾函數,因爲它不會在函數內部返回任何東西。 – theva