用于循环对象的JavaScript替换undefined并为不存在的键赋值

时间:2017-03-21 21:12:32

标签: javascript arrays json object

我有一个名为data的对象,其中一些元素是undefined,或者只是缺失。

如何进行for循环以将我的个人价值分配给这些字段?

data.forEach(function(obj) {
  for(var i in obj) { 
    if(obj[i] === undefined) {
      obj[i] = '';
    }
  }
});

目前这只是替换undefined,如果不存在任何字段,如何更新以传递空值?

2 个答案:

答案 0 :(得分:1)

您可以使用所有密钥创建一个数组:

var keys = ['foo', 'bar', 'buzz'];

然后迭代它并检查对象中是否存在键给定属性

var obj = {
    foo: 'a'
}

for (var i = 0, n = keys.length; i < n; i++) {
    var key = keys[i];

    if (!obj[key]) {
        obj[key] = '';
    }      
}

干杯

答案 1 :(得分:1)

如果您想完成“间隙”,从某些意义上说,您的某些对象将没有其他人拥有的属性,那么您可以使用此ES6代码:

function fillGaps(data) {
    return new Set([].concat(...data.map(Object.keys))) // create set of all keys
        .forEach( key =>
            data.filter( obj => obj[key] === undefined) // get missing/undefined keys
                .forEach( obj => obj[key] = '' ) ); // set them
}

// Example
var data = [{
    a: 1,
    b: 2
}, {
    a: 10,
    b: 30,
    c: 9
}, {
    a: undefined,
    c: 8
}];

fillGaps(data);

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES5等效

function fillGaps(data) {
    // create object with all keys
    keys = Object.keys([].concat.apply([], data.map(Object.keys))
                    .reduce (function (acc, key) {
                        acc[key] = 1;
                        return acc;
                    }, {})
    ).forEach(function (key) {
        return data.filter(function (obj) { // get missing/undefined keys
            return obj[key] === undefined;
        }).forEach(function (obj) {  // set them
            obj[key] = '';
        });
    });
}

// Example
var data = [{
    a: 1,
    b: 2
}, {
    a: 10,
    b: 30,
    c: 9
}, {
    a: undefined,
    c: 8
}];

fillGaps(data);

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }