如果数组中的对象包含特定的键值对,如何返回它?
如果它具有给定的所有键值对,我需要返回它,而不仅仅是一个。
例如,
此函数将对象数组作为第一个参数,将给定键值对作为第二个参数的对象
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 }]
答案 0 :(得分: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 }))
答案 1 :(得分:1)
使用 underscore.js 。这很简单。
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>
答案 2 :(得分:0)
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 }));
答案 3 :(得分: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 }));