推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
kaiki

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

  •  
  •   kaiki · Dec 26, 2023 · 2142 views
    This topic created in 883 days ago, the information mentioned may be changed or developed.

    结构大概是

    {
    	'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 replies    2023-12-26 11:52:27 +08:00
    qianlige
        1
    qianlige  
       Dec 26, 2023
    Object.keys()
    jianchang512
        2
    jianchang512  
       Dec 26, 2023 via Android
    这种问题难道不是 chatGPT 最擅长的吗
    Rache1
        3
    Rache1  
       Dec 26, 2023   ❤️ 1
    const v = Object.values(data)
    .map(v => Object.values(v).map(v => Object.values(v)))
    .flat(3);

    console.log(v);
    asche910
        4
    asche910  
       Dec 26, 2023   ❤️ 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  
       Dec 26, 2023
    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
       Dec 26, 2023
    @asche910 确实是这个,我之前用 concat(...arr)报错看样子是没有前面这一步
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5342 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 06:58 · PVG 14:58 · LAX 23:58 · JFK 02:58
    ♥ Do have faith in what you're doing.