2017-02-24 85 views
0

如果返回數組中包含特定鍵值對的對象,該如何返回對象?如果包含鍵值對,則返回數組中的對象

我需要返回它,如果它有給定的所有鍵值對,而不只是一個。

例如,

此功能使用對象作爲第一參數的陣列,並用給定的密鑰值對作爲第二參數的對象

whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }); 

應返回

[{ "a": 1, "b": 2 }, { "a": 1, "b": 2, "c": 2 }] 
+1

你說的'擁有所有鍵值pairs'是什麼意思? – Rajesh

+0

[按值或屬性從對象數組中獲取JavaScript對象]的可能重複(http://stackoverflow.com/questions/13964155/get-javascript-object-from-array-of-objects-by-value-or-物業) – Rajesh

回答

1

您可以使用filter()every()來做到這一點。

function whatIsInAName(a, b) { 
 
    return a.filter(function(e) { 
 
    return Object.keys(b).every(function(c) { 
 
     return e[c] == b[c] 
 
    }) 
 
    }) 
 
} 
 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }))

+0

感謝您的幫助!欣賞它! –

0

使用Array#filterArray#every方法。

function whatIsInAName(arr, obj) { 
 
    // get the keys array 
 
    var keys = Object.keys(obj); 
 
    // iterate over the array 
 
    return arr.filter(function(o) { 
 
    // iterate over the key array and check every property 
 
    // is present in the object with the same value 
 
    return keys.every(function(k) { 
 
     return obj[k] === o[k]; 
 
    }) 
 
    }) 
 
} 
 

 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));

+0

謝謝!感謝你的幫助! –

0

您可以在陣列與圖案的鍵和值的檢查過濾器。

function whatIsInAName(array, pattern) { 
 
    var keys = Object.keys(pattern); 
 
    return array.filter(function (o) { 
 
     return keys.every(function (k) { 
 
      return pattern[k] === o[k]; 
 
     }); 
 
    }); 
 
} 
 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));

+1

'pattern [k] = o [k]'這是一個asignment,沒有比較;)我將這部分Object.keys(pattern)從這個循環中移出/提取出來 – Thomas

1

使用underscore.js。這很簡單。

function whatIsInAName(a, b){ 
 
\t return _.where(a, b); 
 
} 
 
var data = whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }); 
 

 
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

相關問題