迭代一个对象以验证它的键是否存在于数组中

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);
    });

Fiddle

Object.keys

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

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

或者如果您想更改对象本身:

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