Javascript - 平面图的解决方法

所以我一直在寻找一些平面地图的解决方法,因为它在 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']


桃花长相依
浏览 151回答 3
3回答

沧海一幻觉

这是因为reduce将你给它的元素加起来。例如,采用以下代码:let arr = [1,2,3,4,5];console.log(arr.reduce((before, value)=>before+value));此代码获取每个value并将其添加到before. 然后它将添加的值传递给变量中的reduce,的下一次迭代。before在您的代码中,您将一个数组传递给before,或者在您的情况下acc,并从该数组连接(合并)一个新数组gadgets['computers']并返回该数组。这将根据对象数组创建计算机列表。更多信息在reduce 这里。

慕田峪7331174

如果您希望输出是数组数组。尝试这个:var gadjets = [  { computers: ["asus", "hp"], sellphones: ["Galaxy", "Nokia"] },  { computers: ["dell", "insys"], sellphones: ["iphone", "samsung"] }];const groupBy = key => {  let res = gadjets.reduce((objectsByKeyValue, obj) => {               let arr = [];               arr.push(obj[key]);               return objectsByKeyValue.concat(arr);        }, []);   return res;};console.log(groupBy("computers"));

翻翻过去那场雪

但它不应该返回吗我不确定你想在那里向我们展示什么,但如果你的意思是[['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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript