首页 > 解决方案 > 创建重复的对象数组

问题描述

假设我有一个对象数组::

const banana = [{"a":"ann","b":"bann","det":[{"c":"cat","d":"dog"},{"c":"conn","d":"donn"}]}, {"a":"auu","b":"buu","det":[{"c":"camel","d":"damel"},{"c":"coww","d":"doww"}]}]

我想以这种形式转换这个对象数组::

const banana =  [{"a":"ann","b":"bann","c":"cat","d":"dog"}, {"a":"ann","b":"bann","c":"conn","d":"donn"}, {"a":"auu","b":"buu","c":"camel","d":"damel"}, {"a":"auu","b":"buu","c":"coww","d":"doww"}]

如您所见,对象数组中的对象数组已合并和重复。

我试过:

const apple = []

for(let i = 0; i<banana.length;i++){
    for(let j = 0;j<banana[i].det.length;j++{
    apple.push(banana[i].det[j])
    }
}
console.log(apple)

**OUTPUT: [{c: "cat", d: "dog"},{c: "conn", d: "donn"},{c: "camel", d: "damel"},{c: "coww", d: "doww"}]**

但我正在寻找 O/P 为:

[{"a":"ann","b":"bann","c":"cat","d":"dog"}, {"a":"ann","b":"bann","c":"conn","d":"donn"}, 
{"a":"auu","b":"buu","c":"camel","d":"damel"}, {"a":"auu","b":"buu","c":"coww","d":"doww"}]

但我无法形成逻辑。我仍在尝试,但如果我能得到一些非常有用的指导。

**编辑:**所以我想出了一个使用扩展运算符的想法:

let enamel = {}

for(let i = 0; i<banana.length;i++){
    for(let j = 0;j<banana[i].det.length;j++){
     employee = {
        ...banana[j],
        ...banana[i].det[j]
    };
    }
}

它给出的输出为:

console.log(enamel) 
{a: "auu", b: "buu", det: Array(2), c: "coww", d: "doww"}

但我想将所有对象都放在一个数组中,如前所述。

标签: javascriptnode.js

解决方案


您可以使用此逻辑,它复制初始对象、添加额外属性、删除det数组并展平结果

function extras(obj) {
  // create a copy of the current context (initial obj)
  // and add all properties from the extra object
  obj = Object.assign({}, this, obj);
  // but delete the `det` from the copy
  delete obj.det;
  // and return the object
  return obj;
}

// per each array object ...
banana
  .map(
    // and per each det ...
    obj => obj.det.map(extras, obj)
  )
  // flatten the final array of objects
  .flat();

推荐阅读