Javascript 比较对象数组。返回匹配的对象键&;价值观
目标 生成一个函数,用于查看列表(集合)并返回具有等效属性值(源)的所有对象的数组Javascript 比较对象数组。返回匹配的对象键&;价值观,javascript,arrays,object,Javascript,Arrays,Object,目标 生成一个函数,用于查看列表(集合)并返回具有等效属性值(源)的所有对象的数组 示例#1 function where(collection, source) { var arr = []; return arr; } where([ { first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { fir
示例#1
function where(collection, source) {
var arr = [];
return arr;
}
where([
{ first: 'Romeo', last: 'Montague' },
{ first: 'Mercutio', last: null },
{ first: 'Tybalt', last: 'Capulet' }],
{ last: 'Capulet' });
[{ first: 'Tybalt', last: 'Capulet' }]
预期产出#1
function where(collection, source) {
var arr = [];
return arr;
}
where([
{ first: 'Romeo', last: 'Montague' },
{ first: 'Mercutio', last: null },
{ first: 'Tybalt', last: 'Capulet' }],
{ last: 'Capulet' });
[{ first: 'Tybalt', last: 'Capulet' }]
示例#2
where(
[{ 'a': 1 },
{ 'a': 1 },
{ 'a': 1, 'b': 2 }],
{ 'a': 1 }),
[{ 'a': 1 }, { 'a': 1 }, { 'a': 1, 'b': 2 }]
预期产出#2
where(
[{ 'a': 1 },
{ 'a': 1 },
{ 'a': 1, 'b': 2 }],
{ 'a': 1 }),
[{ 'a': 1 }, { 'a': 1 }, { 'a': 1, 'b': 2 }]
问题
->解决方案1:使用Lodash
其中
对于此类问题,可以使用实用程序库
Lodash已经具有您需要的功能
请参见下面的示例
var out=\其中([{
第一个:“罗密欧”,
最后一句:“蒙太古”
}, {
第一个:'美库西奥',
最后:空
}, {
第一个:“提伯特”,
最后一句:“卡普莱特”
}],
{
最后一句:“卡普莱特”
});
document.getElementById('out').innerHTML=JSON.stringify(out);
var out2=389;。其中(
[{
“a”:1
}, {
“a”:1
}, {
"a":1,,
b:2
}],
{
“a”:1
});
document.getElementById('out2').innerHTML=JSON.stringify(out2)代码>
由于您无法使用外部库,因此有一种简单的方法可以满足您的需要:
function where(collection, source) {
var keys = Object.keys(source);
return collection.filter(function (item) {
return keys.every(function (key) {
return source[key] == item[key];
});
});
}
因此,您的困难在于如何检索source
?Lodash中指定的密钥以进行救援@TedHopp Yes-我的困难是检索数组中的嵌套键和值,然后将它们与另一个对象进行比较array@Amit不幸的是,这是在线学习课程的一部分,我无法导入自己的库:(您可能会发现该函数很有用。不幸的是,我的问题是在线课程的一部分,我无法导入自己的库:(您可以在lodash库中检查where
的实现。请参阅@jad panda您是否查看了您提供的链接?您基本上是在把读者送到兔子洞里。@jad panda-我想您做得很好(不打算验证:-),但请注意最初的问题是什么…您的解决方案可能是一个exterme overkill。当有人寻找这种复杂性时,最好使用一个外部库。@Amit解决方案并没有过度使用它仅有的30行代码。剩下的代码是测试。只验证在哪里
正常工作。它对嵌套库不起作用虽然这不是需求的一部分,但解决方案可以扩展以进行深入比较,但会更加复杂。