Javascript 检查对象的一部分是否包含另一个完整对象
我有一个动态的大对象,但它的结构很简单,如下所示:Javascript 检查对象的一部分是否包含另一个完整对象,javascript,Javascript,我有一个动态的大对象,但它的结构很简单,如下所示: let numbers = { one: true, two: false, three: false, four: true, five: true, six: false, seven: false, eight: false, nine: false, ten: false }; 然后是一个较小对象的数组,这些对象是动态的,可以包含也可
let numbers = {
one: true,
two: false,
three: false,
four: true,
five: true,
six: false,
seven: false,
eight: false,
nine: false,
ten: false
};
然后是一个较小对象的数组,这些对象是动态的,可以包含也可以不包含来自第一个对象的值
let input = [{ one: true, four: true, five: true}, { one: true, two: true, three: true, ten: true}];
因此,我需要的是查看第二个对象中的所有属性是否与第一个对象中的相应属性完全匹配。在上述情况下,第一个对象将匹配,但第二个对象将失败,因为ten:true
与第一个对象中的相应属性不匹配
let input = [{ one: true, four: true, five: true}, { one: true, two: true, three: true, ten: true}];
这就是我想到的,但它似乎效率很低,我忍不住认为有更好的方法:
checkMatch(numbers, input) {
for (let obj of input) {
let count = 0;
for (let key of obj) {
if (numbers[key]) count++;
}
if (count == Object.keys(obj).length) console.log('match');
else console.log('no match');
}
}
您可以使用您可以匹配的所有
让输入=[{
一:对,,
四:对,,
五:对
}, {
一:对,,
二:对,,
三:对,,
十:对
}];
让数字={
一:对,,
二:错,,
三:错,,
四:对,,
五:对,,
六:错,,
七:错,,
八:错,,
九:错,,
十:错
};
input.forEach(a=>{
var matches=Object.keys(a).every(b=>numbers[b]==a[b]);
console.log(匹配项);
})
您可以迭代条目并检查原始对象是否包含属性和值
const
check=o=>Object.entries(o).every([k,v])=>k个数字和数量[k]==v),
数字={1:true,2:false,3:false,4:true,5:true,6:false,7:false,8:false,9:false,10:false},
input=[{1:true,4:true,5:true},{1:true,2:true,3:true,10:true}];
console.log(input.map(check))
您可以在对象.entries()上使用数组#every()
让数字={
一:对,,
二:错,,
三:错,,
四:对,,
五:对,,
六:错,,
七:错,,
八:错,,
九:错,,
十:错
};
让输入=[{1:true,4:true,5:true},{1:true,2:true,3:true,10:true}];
input.forEach(o=>{
const isMatch=Object.entries(o).every(arr=>number[arr[0]]]==arr[1])
console.log([isMatch,o]);
})
无论如何,你必须迭代数组及其内容的每个属性。你检查过了吗?@SandipNirmal Lodash可能会使代码更紧凑,但它必须不可避免地做同样的工作。@Pointy是的,这是肯定的,但无论如何,我们必须进行迭代才能使其工作。最好使用loadsh
,因为这已经在浏览器和节点上进行了测试。@SandipNirmal Lodash是一个很好的建议,但我的应用程序中不需要它的任何其他功能,所以它看起来不太合适。你可以使用。each
而不是。map
,因此不需要匹配项flag.也可以这样做:Object.keys(a).every(b=>number[b]==a[b])