Javascript-平面图的解决方法

问题描述 投票:0回答:2

所以我一直在寻找平面地图的解决方法,因为它在IE上不起作用,我找到了这个:但我不太明白为什么会这样]

var gadjets = [
  {computers:['asus', 'hp'],
  sellphones:['Galaxy', 'Nokia']
  },

  {computers:['dell', 'insys'],
  sellphones:['iphone', 'samsung']
  }
];

const getValues = gadjets.reduce((acc, gadjet) => acc.concat(gadjet[computers]), []) // instead of gadjets.flatMap(gadjet=> gadjet[computers])

此代码返回:

['asus','hp','dell','insys']

但它不应该返回:

['asus','hp'],['dell', 'insys']
javascript arrays ecmascript-6 flatmap
2个回答
0
投票

这是因为reduce将您提供的元素相加。例如,使用以下代码:

let arr = [1,2,3,4,5];
console.log(arr.reduce((before, value)=>before+value));

此代码获取每个value并将其添加到before。然后,它将添加的值传递到reduce变量中的before的下一个迭代中。

在您的代码中,您正在将array传递到before,或者在您的情况下是acc,并连接(合并)来自gadgets['computers']的新数组并返回该数组。这将从对象数组创建计算机列表。

reduce here的更多信息。


0
投票

但它不应该返回

我不确定您要向我们展示的内容是什么,但是如果您的意思是

[['asus','hp'],['dell', 'insys']]

然后不,不应该。 concat展平您传递的数组(到单个级别):

const a = [].concat(['asus','hp'], ['dell', 'insys']);
console.log(a); // ["asus", "hp", "dell", "insys"]

因此acc.concat(gadjet[computers])将这些computers数组中的每一个展平为一个新数组,这是reduce的累加结果。

© www.soinside.com 2019 - 2024. All rights reserved.