标题。我可以有两种或三种类型的对象,但是如果将任何新的键/属性添加到未来的对象中,我想提供可靠的功能来覆盖所有其他情况。
每当我在具有相同属性(obj1
,obj4
)的对象中进行映射时,一切都是K.问题是当我想创建一个函数来映射{{1中的所有对象与arr
一起,可能是也可能不是特定对象。
我在考虑keys
,但如果新密钥可能被添加,除非我可以通过创建具有唯一键的新数组来分析if ('key' in obj)
中的所有对象键,否则将来不会使函数可靠。对象。但是如果对象将有10个键,并且数组中将有1000多个对象,我认为会出现性能问题;如果我错了,请纠正我。
同样适用于arr
。
.hasOwnProperty()
答案 0 :(得分:1)
您可以使用Object.keys
或for...in
循环来动态获取或循环访问对象的键,而不是控制对象可能具有的键。像这样:
var obj = {
"key1": 2,
"key2": 3,
"key-unknown": 5
}
console.log("METHOD 1:");
var keys = Object.keys(obj);
console.log("obj has these keys: ", keys);
console.log("\nMETHOD 2:");
for(var key in obj) {
console.log("'" + key + "' is a key");
}

使用上述两种方法,您可以安全地动态使用对象拥有的键,而不使用一组预定义的静态键,这些键可能在对象中,也可能不在,并且可能少于对象实际拥有的
答案 1 :(得分:0)
从一个疯狂的猜测中你可能需要一个函数,如;
function fillMissingKeys(a){
var keys = a.reduce((k,o) => Object.assign(k,Object.keys(o)),[])
.reduce((o,k) => (o[k] = null,o),{});
return a.map(o => Object.assign({},keys,o));
}
var arr = [
obj1 = {
key1: "val1",
key2: "val2",
key3: "val3"
},
obj2 = {
key3: "val3"
},
obj3 = {
key1: "val4",
key2: "val5",
key3: "val1",
key4: "val8"
},
obj4 = {
key1: "val6",
key2: "val7"
}
];
console.log(fillMissingKeys(arr))