Javascript 迭代对象以验证它是否';s键存在于数组中

Javascript 迭代对象以验证它是否';s键存在于数组中,javascript,arrays,underscore.js,javascript-objects,Javascript,Arrays,Underscore.js,Javascript Objects,情况如下: 我有一个数组和一个对象 说: *对象中的值现在并不重要 我想使用下划线在对象上迭代并检查数组中是否存在每个键。如果是,我希望能够将其值设置为true,如果不是,我希望将其设置为false 到目前为止,我已经尝试: _.mapObject(Object, function(val, key){ for (var j = 0; j < Array.length; j++) { currentKey = Array[j];

情况如下:

我有一个数组和一个对象

说:

*对象中的值现在并不重要

我想使用下划线在对象上迭代并检查数组中是否存在每个键。如果是,我希望能够将其值设置为true,如果不是,我希望将其设置为false

到目前为止,我已经尝试:

 _.mapObject(Object, function(val, key){

        for (var j = 0; j < Array.length; j++) {
            currentKey = Array[j];
            (function(i){
                for (var k = 0; k < Array.length; k++) {
                    if(key === Array[i]) {
                        return val = true;
                    } else {
                        return val = false;
                    }
                }
            })(currentKey);
        }

    });
\映射对象(对象,函数(val,键){
对于(var j=0;j

狗屎很让人迷惑;至少对我来说。非常感谢您的帮助。

您不需要在下面划线来执行此操作:

var arr=['a'、'b'、'c'],
obj={a:'',b:'',c:'',d:''};
功能检查(a,o){
for(变量输入o){
如果(a.indexOf(键)!=-1){
o[键]=真
}
}
}
检查(arr、obj);

document.write(JSON.stringify(obj))
我认为这不需要下划线:

var a = ["field1", "field2", "field3"];
var o = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined}

for (var k in o) {
  o[k] = a.indexOf(k) != -1;
}

正如其他人所说,没有必要使用下划线

您可以使用本机
对象.keys
返回
own
键的数组,然后对它们进行迭代<代码>对象。键
将不包括从原型链继承的属性,而在中,
将包含这些属性。但是,速度相当慢,这可能是大型数据集的问题

Object.keys(obj)
    .forEach(function (key) {
        obj[key] = (arr.indexOf(key) !== -1);
    });


下面是一个使用下划线的解决方案:

    var result = _.mapObject(Object, function(value, field){
        return _.contains(Array, field);
    });
或者,如果要更改对象本身:

    var result = _.each(Object, function(value, field){
        return _.contains(Array, field);
    });

将对象命名为
Object
和数组
Array
是一个非常糟糕的主意,因为它们是内置的类*名称,以后可能会出现很多有趣的错误。相反,
obj
arr
如何?如果只有一个键不相同,您不能
返回false
。非常感谢@Gruff bunny!
    var result = _.each(Object, function(value, field){
        return _.contains(Array, field);
    });