Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查对象的一部分是否包含另一个完整对象_Javascript - Fatal编程技术网

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])