2016-07-27 64 views
-1

我需要根據以下2個屬性從數組中找到唯一對象。當「班級」和「票價」匹配時,我需要提取唯一值並將它們放入結果數組中。javascript - 基於多個屬性在數組中找到唯一對象

來源:

var arr = [{class:"second", fare: "a"}, 
{class:"second", fare: "b"}, 
{class:"first", fare: "a"}, 
{class:"first", fare: "a"}, 
{class:"second", fare: "a"}, 
{class:"first", fare: "c"} 
] 

預期結果:

var result = [{class:"second", fare: "a"}, 
{class:"second", fare: "b"}, 
{class:"first", fare: "a"}, 
{class:"first", fare: "c"} 
] 

我看了看在SO,並能找到它是基於一個屬性(Create array of unique objects by property)過濾的答案,但沒找到這可以根據2個屬性來完成。

+1

我認爲會有更多如果你表現出你自己的解決方案,願意提供幫助ñ。你沒有*有*從網上回答;即使是基於溫和的對象關鍵訪問知識的冗長解決方案,也可能讓您考慮重要的部分。 – Katana314

+0

'class'是一個ES6保留字。使用'kind','type'或其他選擇。 – alex030293

+0

@ Katana314 - 嗯,我嘗試了幾件事,但最終刪除了該代碼。無論如何,都會努力做到這一點。 – whyAto8

回答

3

您可以爲散列表構建一個組合鍵,過濾給定的數組。

var arr = [{ class: "second", fare: "a" }, { class: "second", fare: "b" }, { class: "first", fare: "a" }, { class: "first", fare: "a" }, { class: "second", fare: "a" }, { class: "first", fare: "c" }], 
 
    result = arr.filter(function (a) { 
 
     var key = a.class + '|' + a.fare; 
 
     if (!this[key]) { 
 
      this[key] = true; 
 
      return true; 
 
     } 
 
    }, Object.create(null)); 
 

 
console.log(result);

+0

謝謝,讓我試試這個。 – whyAto8

+0

完美,這工作得很好。非常感謝。 – whyAto8

+0

嘿,只有一個疑問,爲什麼我們在這裏需要「Object.create(null)」? – whyAto8

0

您可以使用forEach循環和filterfind數組屬性以便發現元素數組存在

var arr = [{ 
     class: "second", 
     fare: "a" 
    }, { 
     class: "second", 
     fare: "b" 
    }, { 
     class: "first", 
     fare: "a" 
    }, { 
     class: "first", 
     fare: "a" 
    }, { 
     class: "second", 
     fare: "a" 
    }, { 
     class: "first", 
     fare: "c" 
    }] 
    var _unArray = []; // new array without duplicate 
    arr.forEach(function(item) { // loop through array which contain duplicate 
     // if item is not found in _unArray it will return empty array 
     var isPresent = _unArray.filter(function(elem) { 
     return elem.class === item.class && elem.fare === item.fare 
     }) 
     if (isPresent.length == 0) { 
     _unArray.push(item) 
     } 
    }) 
    console.log(_unArray) 

JSFIDDLE

+0

對於解決方案而言,將「類別」和「票價」屬性烘焙到其中是不令人滿意的。 – 2016-07-27 16:16:51

相關問題