Javascript 迭代对象以验证它是否';s键存在于数组中
情况如下: 我有一个数组和一个对象 说: *对象中的值现在并不重要 我想使用下划线在对象上迭代并检查数组中是否存在每个键。如果是,我希望能够将其值设置为true,如果不是,我希望将其设置为false 到目前为止,我已经尝试: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];
_.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);
});