我有一个名为data
的对象,其中一些元素是undefined
,或者只是缺失。
如何进行for
循环以将我的个人价值分配给这些字段?
data.forEach(function(obj) {
for(var i in obj) {
if(obj[i] === undefined) {
obj[i] = '';
}
}
});
目前这只是替换undefined
,如果不存在任何字段,如何更新以传递空值?
答案 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; }
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; }