通过与其他对象相比没有一个或两个键的对象映射对象数组

时间:2017-03-18 16:39:33

标签: javascript arrays javascript-objects

标题。我可以有两种或三种类型的对象,但是如果将任何新的键/属性添加到未来的对象中,我想提供可靠的功能来覆盖所有其他情况。

每当我在具有相同属性(obj1obj4)的对象中进行映射时,一切都是K.问题是当我想创建一个函数来映射{{1中的所有对象与arr一起,可能是也可能不是特定对象。

我在考虑keys,但如果新密钥可能被添加,除非我可以通过创建具有唯一键的新数组来分析if ('key' in obj)中的所有对象键,否则将来不会使函数可靠。对象。但是如果对象将有10个键,并且数组中将有1000多个对象,我认为会出现性能问题;如果我错了,请纠正我。

同样适用于arr

.hasOwnProperty()

2 个答案:

答案 0 :(得分:1)

您可以使用Object.keysfor...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))