迭代一个对象以验证它的键是否存在于数组中
Iterating over an Object to verify if it's keys exist in an Array
情况是这样的 -
我有一个数组和一个对象。
说:
var Array = ["field1", "field2", "field3"];
var Object = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined}
*对象中的值现在并不重要
我想使用 underscoreJS 遍历对象并检查数组数组中是否存在每个键。如果是,我希望能够将其值设置为 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);
}
});
狗屎很混乱;至少对我来说。感谢任何帮助。
您不需要 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))
我认为你不需要下划线:
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;
}
正如其他人所说,不需要下划线。
您可以使用本机 Object.keys
到 return 一个 own
键数组,然后遍历它们。 Object.keys
不会包括 for in
会从原型链继承的属性。然而,它相当慢,这可能是大型数据集的问题。
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);
});
情况是这样的 -
我有一个数组和一个对象。
说:
var Array = ["field1", "field2", "field3"];
var Object = { field1: undefined, field2: undefined, field3: undefined, field4: undefined, field5: undefined}
*对象中的值现在并不重要
我想使用 underscoreJS 遍历对象并检查数组数组中是否存在每个键。如果是,我希望能够将其值设置为 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);
}
});
狗屎很混乱;至少对我来说。感谢任何帮助。
您不需要 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))
我认为你不需要下划线:
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;
}
正如其他人所说,不需要下划线。
您可以使用本机 Object.keys
到 return 一个 own
键数组,然后遍历它们。 Object.keys
不会包括 for in
会从原型链继承的属性。然而,它相当慢,这可能是大型数据集的问题。
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);
});