简体   繁体   English

如果包含键值对,则返回数组中的对象

[英]Return object in array if contain key value pairs

How do you return objects in an array if it contain specific key-value pairs? 如果数组包含特定的键值对,如何返回对象?

I need to return it if it has all key value pairs given, not just one. 如果给定了所有键值对,而不仅仅是一个,我就需要返回它。

for example, 例如,

This function with the array of objects as the 1st argument, and an object with given key value pairs as the 2nd argument 该函数将对象数组作为第一个参数,并将具有给定键值对的对象作为第二个参数

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

should return 应该回来

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

You can do this with filter() and every() . 您可以使用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 })) 

Use underscore.js . 使用underscore.js It's simple. 这很简单。

 function whatIsInAName(a, b){ 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> 

Use Array#filter method with Array#every method. Array#filter方法与Array#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 })); 

You could filter the array with a check for the pattern's key and values. 您可以通过检查模式的键和值来过滤数组。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM