javascript - 创建重复的对象数组
问题描述
假设我有一个对象数组::
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"}
但我想将所有对象都放在一个数组中,如前所述。
解决方案
您可以使用此逻辑,它复制初始对象、添加额外属性、删除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();
推荐阅读
- javascript - 如何在 Javascript 中指定两个 math.floor 值
- python - 有没有办法使用 python3 播放特定的音调?
- python - 识别矩阵是否具有多个的算法的递归
- git - Git 分支未显示所有分支
- c++ - 如何删除/解决 C++ 函数模板实例化注释/警告
- node.js - 一个好的做法是返回一个 Promise,当它解决时它的值是未定义的?
- python - 估计整个时间段内数据帧中的百分比回报
- textures - 如何绕过 SDL2 中的纹理和视频内存限制?
- java - 从 Spring Boot 2.1.7 升级到 2.2.0 后,由于 FailureAnalyzer,应用程序无法启动
- coq - 在假设中处理 forall