如何移动嵌套数组中的元素?附示例数据与预期输出
提取嵌套交易数据并扁平化数组
看来你是想把每个产品下的交易项单独拎出来,形成一个包含产品信息+交易详情的一维数组对吧?我给你写个简单直接的实现方案:
首先先确认你的原始数据:
let products = [ { "product_name": "A", "_id": "5ace995c14a759325776aab1", "transactions": [ { "_id": "5ad3a274ac827c165a510f99", "qty": 100, "price": 2000 }, { "_id": "5ad3a274ac827c165a510f99", "qty": 80, "price": 1500 } ] }, { "product_name": "B", "_id": "5ace995914a759325776aab0", "transactions": [ { "_id": "5ad3a274ac827c165a510f9b", "qty": 80, "price": 1500 } ] } ];
用flatMap搭配map就能轻松搞定这种嵌套数组扁平化的需求,代码逻辑很直观:
const flattenedTransactions = products.flatMap(product => product.transactions.map(transaction => ({ // 单独保留产品的核心标识和名称,避免和交易ID冲突 product_id: product._id, product_name: product.product_name, // 合并交易的所有详情 ...transaction })) );
执行这段代码后,你会得到符合预期的扁平化结果:
[ { "product_id": "5ace995c14a759325776aab1", "product_name": "A", "_id": "5ad3a274ac827c165a510f99", "qty": 100, "price": 2000 }, { "product_id": "5ace995c14a759325776aab1", "product_name": "A", "_id": "5ad3a274ac827c165a510f99", "qty": 80, "price": 1500 }, { "product_id": "5ace995914a759325776aab0", "product_name": "B", "_id": "5ad3a274ac827c165a510f9b", "qty": 80, "price": 1500 } ]
我特意把产品的ID重命名为product_id,这样就不会和交易自身的_id字段冲突。如果你的业务场景不需要区分两者,也可以直接展开产品的所有属性再覆盖,但分开存储会更稳妥,避免后续出现字段混淆的问题。
内容的提问来源于stack exchange,提问作者Pengguna
相关产品推荐
相关产品推荐

