繁体   English   中英

使用[过滤器,映射,一些,化简等]从2d数组的子对象创建1d数组

[英]Create 1d array from 2d array's sub objects using [filter, map, some, reduce etc]

我有一个对象如下:

Response{
  result:[{products:[o1,o2,o3]},{products:[o5,o7,o8]},{products:[o11,o12,o13]}]
}

如何使用函数式编程(过滤,映射,某些,化简等)创建所有产品对象o1,o2 ...的数组?

输出应为:

outArray = [o1,o2,o3,o5,o7,o8,o11,o12,o13]

为此,可以将concatmap结合使用:

 const products = [{products:[1,2,3]},{products:[5,7,8]},{products:[11,12,13]}]; const result = Array.prototype.concat.apply([], products.map(item => item.products)); console.log(result); 

使用Array#reduceArray#push解构传播语法

 const data = {result:[{products:['a','b','c']},{products:['a','b','c']},{products:['a','b','c']}]} const res = data.result.reduce((a, {products}) => { a.push(...products); return a; }, []) console.log(res); 

较不冗长的替代方案,仍然使用mapspread运算符。

 const init = [ {products: [1, 2, 3]}, {products: [5, 7, 8]}, {products: [11, 12, 13]} ]; const result = [].concat(...init.map(x => x.products)); console.log(result); 

您可以使用地图并结合在一起以获取欲望输出

let result =[{products:['o1','o2','o3']},{products:['o5','o7','o8']},{products:['o11','o12','o13']}];
let data = [result.map(function(o){ return o.products})].join(',').split(',');
console.log(data);

使用Array.prototype.flatMap。

 const data = [{products: ['o1','o2','o3']}, {products: ['o5','o7','o8']}, {products: ['o11','o12','o13']}]; console.log(data.flatMap(p => p.products)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM