JS 如何把不同 key 的多维数组的值合并为一个新数组?

183 天前
 kaiki

结构大概是

{
	'item1':{
		'list':{
			'a':{
				{
					'name':'xxx',
					'num':1.
				},
				{
					'name':'xxx',
					'num':1.
				}
			}
			'b':{
				{
					'name':'xxx',
					'num':1.
				}
			}
		}
	}
	'item2':{
		'list':{
			'w':{
				{
					'name':'xxx',
					'num':1.
				}
			}
			's':{
				{
					'name':'xxx',
					'num':1.
				},
				{
					'name':'xxx',
					'num':1.
				}
			}
		}
	}
	'item3':{
		'list':{
			'a':{
				{
					'name':'xxx',
					'num':1.
				}
			}
			'e':{
				{
					'name':'xxx',
					'num':1.
				}
			}
		}
	}
}

数量都不固定,想要把里面的{name,num}全部提取出来做成新的数组,怎么快速实现?

1055 次点击
所在节点    JavaScript
6 条回复
qianlige
183 天前
Object.keys()
jianchang512
183 天前
这种问题难道不是 chatGPT 最擅长的吗
Rache1
183 天前
const v = Object.values(data)
.map(v => Object.values(v).map(v => Object.values(v)))
.flat(3);

console.log(v);
asche910
183 天前
// 合并后的数组
let result = [];

// 遍历原始数据
for (const key in data) {
const innerLists = Object.values(data[key].list);

// 使用 concat 将多个数组合并为一个
result = result.concat(...innerLists);
}

console.log(result);
Mistyrainjn
183 天前
const data = {
'item1': {
'list': {
'a': [
{ 'name': 'xxx', 'num': 1 },
{ 'name': 'xxx', 'num': 1 }
],
'b': [
{ 'name': 'xxx', 'num': 1 }
]
}
},
'item2': {
'list': {
'w': [
{ 'name': 'xxx', 'num': 1 }
],
's': [
{ 'name': 'xxx', 'num': 1 },
{ 'name': 'xxx', 'num': 1 }
]
}
},
'item3': {
'list': {
'a': [
{ 'name': 'xxx', 'num': 1 }
],
'e': [
{ 'name': 'xxx', 'num': 1 }
]
}
}
};

// 合并所有{name, num}到一个新数组
const mergedArray = Object.values(data).reduce((result, item) => {
Object.values(item.list).forEach(subList => {
subList.forEach(obj => {
result.push({ name: obj.name, num: obj.num });
});
});
return result;
}, []);

console.log(mergedArray);
kaiki
183 天前
@asche910 确实是这个,我之前用 concat(...arr)报错看样子是没有前面这一步

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003459

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX