所以我试图检查一个对象是否包含另一个/部分。例如,我想检查{ a: 1, b: 2, c: 2 }
是否包含{ a: 1, b: 2 }
。但必须按顺序排列。如果a
是第一个元素并排成一行,则b
元素必须在之后完全排列。加上他们无论如何我可以检查那里的价值? 订单很重要。
//Here is my code currently:
function whatIsInAName(collection, source) {
var array = [];
var sourceNames = Object.getOwnPropertyNames(source);
for (var i = 0; i < collection.length; i++) {
var collectionNames = Object.getOwnPropertyNames(collection[i])
JSON.stringify(collectionNames).includes(JSON.stringify(sourceNames)) ? array.push(collection[i]) : null
}
return array
}
whatIsInAName([{ a: 1, b: 2 }, { a: 1 }, { a: 1, b: 2, c: 2 }], { a: 1, b: 2 });
这是一个确切的检查,但仅限于名称。我希望它也比较了价值观。
它也没有部分检查另一个对象。就像comaparing { a: 1, b: 2, c: 2 }
包含{ a: 1, b: 2 }
这是我给出的挑战 - &gt; https://www.freecodecamp.org/challenges/wherefore-art-thou
答案 0 :(得分:0)
您可以使用单个对象的键来比较值,并使用every
返回结果以过滤对象数组。
Array#filter
用于获取数组的部分,
Object.keys
用于获取具有该对象的自己键的数组,
数组#every`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every)用于检查所有键和值,
in
operator用于检查对象中是否存在密钥
Identity/strict equality operator ===
用于检查操作数的类型和值。
function compare(array, object) {
return array.filter(function (o) {
return Object.keys(object).every(function (k) {
return k in o && object[k] === o[k];
});
});
}
console.log(compare([{ a: 1, b: 2 }, { a: 1 }, { a: 1, b: 2, c: 2 }], { a: 1, b: 2 }));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
我试图引导您在评论中自行解决问题,但如果您只是在寻找解决方案,那么您可以使用基本的JavaScript结构来实现这一目标(没有什么比{ {1}}和Array#filter
)。
它可能比其他一些解决方案长得多,但它利用了JavaScript的基础知识:
Array#every
&#13;