javascript - Node Js - 展平对象数组
问题描述
我有一个这样的数组
var data = [
{
family: "Fam A",
category: "Cat A",
products: [
{
name: "Name A1",
style: "Style A1"
},
{
name: "Name A2",
style: "Style A2"
}
]
},
{
family: "Fam B",
category: "Cat B",
products: [
{
name: "Name B1",
style: "Style B1"
},
{
name: "Name B2",
style: "Style B2"
}
]
}
];
我想改变下面的内部对象
var data = [
{family:"Fam A", category: "Cat A", name: "Name A1", style:"Style A1"},
{family:"Fam A", category: "Cat A", name: "Name A2", style:"Style A2"},
{family:"Fam B", category: "Cat B", name: "Name B1", style:"Style B1"},
{family:"Fam B", category: "Cat B", name: "Name B2", style:"Style B2"}
]
我尝试使用在其他帖子中找到的 map 和 forEach ,但没有任何工作。
var flattened = data.products.map(x => Object.assign(x, { productDetails: data.products }))
function getList(data, arrayKey, arrayName) {
data[arrayKey].forEach(function(element) {
element[arrayName] = data[arrayName];
});
return data[arrayKey];
}
理想的解决方案将能够处理动态嵌套,但不必继续。
提前感谢您帮助新开发人员!
解决方案
您可以Array#flatMap
使用嵌套映射。
var data = [{ family: "Fam A", category: "Cat A", products: [{ name: "Name A1", style: "Style A1" }, { name: "Name A2", style: "Style A2" }] }, { family: "Fam B", category: "Cat B", products: [{ name: "Name B1", style: "Style B1" }, { name: "Name B2", style: "Style B2" }] }],
flat = data.flatMap(({ products, ...o }) => products.map(p => ({ ...o, ...p })));
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- wordpress - 编写插件:插入图片
- filenames - Drupal 8 在实体保存时在私人和公共文件夹之间移动文件
- linux - 使用 Shell 创建具有完整数字格式而不是字符串格式的 CSV 文件
- javascript - document.getElementById("<%= errorIcon.ClientID %>"); 给空
- c++ - c++:原始指针映射中的复制、删除和运算符 =
- android - 如何在kotlin android中将base64字符串转换为图像
- reactjs - 通过 webpack 编译时出现此错误 Unexpected token, expected ","
- sql - 如何仅在 SQLCMD 作业的输出中获得结果?
- azure - 如何使用 Azure 逻辑应用和 SQL 连接器在存储队列中创建消息
- sql-server - 将 listbox.recordset 设置为 ADODB 记录集会导致使用列表框时崩溃