继承情况 -
我有一个数组和一个对象。
说:
var Array = ["field1", "field2", "field3"];
var Object = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined}
*对象中的值现在并不重要
使用underscoreJS我想迭代Object并检查Array数组中是否存在每个键。如果是的话,我希望能够将其值设置为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);
}
});
狗屎很混乱;对我来说至少。任何帮助都是值得赞赏的。
答案 0 :(得分:1)
我认为你不需要强调这一点:
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;
}
答案 1 :(得分:1)
正如其他人所说,不需要下划线。
您可以使用本机Object.keys
返回own
个键的数组,然后迭代它们。 Object.keys
将不会包含原型链中for in
将继承的属性。然而,它相当慢,这可能是大型数据集的问题。
Object.keys(obj)
.forEach(function (key) {
obj[key] = (arr.indexOf(key) !== -1);
});
答案 2 :(得分:1)
以下是使用下划线的解决方案:
var result = _.mapObject(Object, function(value, field){
return _.contains(Array, field);
});
或者如果你想改变对象本身:
var result = _.each(Object, function(value, field){
return _.contains(Array, field);
});
答案 3 :(得分:0)
您不需要underscore
来执行此操作:
var arr = ['a','b','c'],
obj = {a: '', b: '', c: '', d:''};
function check (a, o) {
for (var key in o) {
if (a.indexOf(key) != -1) {
o[key] = true
}
}
}
check(arr,obj);
document.write(JSON.stringify(obj))