如何仅将多维数组的部分内容扁平化一级?JSON数组处理求助
解决JSON对象转目标一维数组的问题
我懂你卡在哪了——你当前代码生成了嵌套数组,核心原因是你把product.name和通过reduce得到的spec数组直接放在了同一个数组里,导致每个子项里还套着一层数组。其实不用这么绕,我们可以直接把名称和所有spec元素合并成一维数组,下面给你两种简单的解决方案:
方法1:使用扩展运算符(推荐,更简洁)
let array = products.map((product) => { return [product.name, ...product.attributes.map(attribute => attribute.spec)]; });
原理说明
product.attributes.map(attribute => attribute.spec)会直接生成一个包含所有spec值的数组(比如["Spec", "Spec"]),用...扩展运算符可以把这个数组里的元素“展开”,和product.name一起组成新的一维数组,完美得到你想要的["Name", "Spec", "Spec"]结构。
方法2:使用concat方法
如果你对扩展运算符不太熟悉,也可以用数组的concat方法来合并:
let array = products.map((product) => { return [product.name].concat(product.attributes.map(attribute => attribute.spec)); });
原理说明
先创建一个只包含产品名称的数组[product.name],然后调用concat方法把spec数组的所有元素合并进来,同样能消除嵌套,得到目标格式。
另外补充一句:你原来代码里的reduce其实是多余的,因为map已经帮你生成了spec的数组,不需要再用reduce重复拼接啦。
内容的提问来源于stack exchange,提问作者Krush
相关产品推荐
相关产品推荐

