2017-02-24 119 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>

相关问题