V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
kaiki
V2EX  ›  JavaScript

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

  •  
  •   kaiki · 361 天前 · 1253 次点击
    这是一个创建于 361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    结构大概是

    {
    	'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}全部提取出来做成新的数组,怎么快速实现?

    6 条回复    2023-12-26 11:52:27 +08:00
    qianlige
        1
    qianlige  
       361 天前
    Object.keys()
    jianchang512
        2
    jianchang512  
       361 天前 via Android
    这种问题难道不是 chatGPT 最擅长的吗
    Rache1
        3
    Rache1  
       361 天前   ❤️ 1
    const v = Object.values(data)
    .map(v => Object.values(v).map(v => Object.values(v)))
    .flat(3);

    console.log(v);
    asche910
        4
    asche910  
       361 天前   ❤️ 1
    // 合并后的数组
    let result = [];

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

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

    console.log(result);
    Mistyrainjn
        5
    Mistyrainjn  
       361 天前
    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
        6
    kaiki  
    OP
       361 天前
    @asche910 确实是这个,我之前用 concat(...arr)报错看样子是没有前面这一步
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2758 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:28 · PVG 22:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.