我有一个对象数组,它们都应该具有相同的键,但缺少一些键。我想用通用值填充缺失的键。
我正在寻找一种简单的方法来做到这一点(本地或通过库),我现在使用的下面的代码可以工作,在我未经训练的眼睛看起来很沉重,我确信我重新发明了一种乏味的方式来做某事,而有一个简单的一个。
var arr = [{
"a": 1,
"b": 2,
"c": 3
},
{
"a": 10,
"c": 30
},
{
"b": 200,
"c": 300
},
]
// get the list of all keys
var allkeys = []
arr.forEach((objInArr) => {
allkeys = allkeys.concat(Object.keys(objInArr))
})
// check all arr entries for missing keys
arr.forEach((objInArr, i) => {
allkeys.forEach((key) => {
if (objInArr[key] === undefined) {
// the generic value, in this case 0
arr[i][key] = 0
}
})
})
console.log(arr)
最佳答案
这是一个在对象文字中使用属性传播的版本,尽管这将有非常有限的浏览器支持:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
var arr = [{
"a": 1,
"b": 2,
"c": 3
},
{
"a": 10,
"c": 30
},
{
"b": 200,
"c": 300
},
]
// Create an object with all the keys in it
// This will return one object containing all keys the items
let obj = arr.reduce((res, item) => ({...res, ...item}));
// Get those keys as an array
let keys = Object.keys(obj);
// Create an object with all keys set to the default value (0)
let def = keys.reduce((result, key) => {
result[key] = 0
return result;
}, {});
// Use object destrucuring to replace all default values with the ones we have
let result = arr.map((item) => ({...def, ...item}));
// Log result
console.log(result);
关于javascript - 如何填充对象数组中缺少的键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47870887/