gpt4 book ai didi

javascript - 在javascript中将一个对象拆分为多个对象并将它们推送到数组中(可能使用下划线/lodash)

转载 作者:行者123 更新时间:2023-11-27 22:51:14 25 4
gpt4 key购买 nike

我想根据条件拆分数组中的对象。如果我得到这样的 json 响应:-

var obj = { dataSo : [{ key1 : "value1", key2 : "value.1.2", key3 : ["value1.3.1","value.1.3.2"]},
{ key1 : "value1", key2 : "value.2.2", key3 : ["value2.3.1","value2.3.2","value.2.3.3"]},
{ key1 : "value1", key2 : "value.3.2", key3 : ["value.3.3.1"]},
{ key1 : "value1", key2 : "value.4.2", key3 : []}]}

然后我必须检查 key3 是否有多个值。如果它确实包含多个值,那么我应该复制整个对象,同时保持 key3 值不同并复制它并将其作为新值插入数组中对象。

例如,根据以前的数据,我应该做这样的事情:-

{ dataSo : [{ key1 : "value.1.1", key2 : "value.1.2", key3 : "value.1.3.1"},
{ key1 : "value.1.1", key2 : "value.1.2", key3 : "value.1.3.2"},
{ key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.1"},
{ key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.2"},
{ key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.3"},
{ key1 : "value.3.1", key2 : "value.3.2", key3 : "value.3.3.1"},
{ key1 : "value.4.1", key2 : "value.4.2", key3 : "" }]}

如何才能有效地实现这一目标?

最佳答案

使用map,将每个元素分解为一个子元素数组,每个子元素对应key3的每个值。然后使用 concat 将它们粘贴回一起:

obj.dataSo = [].concat(...obj.dataSo.map(({key1, key2, key3}) =>
key3.map(key3 => ({key1, key2, key3}))
);

请注意,此解决方案不处理非数组的 key3 值,如果 key3 为空,它将省略相应的元素。要解决此问题,请预处理 key3:

obj.dataSo = [].concat(...obj.dataSo.map(({key1, key2, key3}) =>
(!Array.isArray(key3) ? [key3] : key3.length ? key3 : [""]) .
map(key3 => ({key1, key2, key3}))
});

此解决方案使用 ES6 功能,例如扩展运算符、解构和对象文字速记。

关于javascript - 在javascript中将一个对象拆分为多个对象并将它们推送到数组中(可能使用下划线/lodash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com