将一个对象分割成多个对象,并将它们推入javascript中的数组中(可能使用下划线/lodash)
Splitting an object into multiple object and pushing them in an array in javascript(Possibly using underscore/lodash)
我想根据条件拆分数组中的对象。如果我得到这样的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的特性,如扩展操作符、解构和对象文字简写。
相关文章:
- Lodash 从值数组中查找数组中的值
- 在lodash上有没有一个替代方案.merge.apply(_,x);其中x是对象的数组
- 对象数组的Lodash并集
- 与 lodash 进行对象深度比较的数组
- 使用lodash从对象数组中获取uniq[key,value]
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 有没有更简洁的方法可以从带有 lodash 的数组中删除条目
- Lodash 从与值数组不匹配的数组中获取项目
- Lodash:从数组中删除连续的重复项
- Lodash 在 JavaScript 中对对象数组进行排序
- 如何使用 lodash 在 Json 文件的数组中仅获取具有特定 atribute 的对象
- lodash/underscore.js函数来创建由x的n个副本组成的数组
- lodash:根据日期聚合和减少对象数组
- 用lodash转换带有对象的javascript数组
- 使用纯JavaScript或Lodash的JSON数组操作
- 如何使用Lodash从数组中查找多个结果
- 如何使用lodash返回与模式匹配的属性数组
- 如果数组中只有一个对象,则Lodash返回错误的reduce结果
- lodash:从对象数组中获取对象值
- 遍历数组,将总和作为对象添加到该数组 (lodash) 中