为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript - 平面图的解决方法

Javascript - 平面图的解决方法

桃花长相依 2022-06-16 17:07:10
所以我一直在寻找一些平面地图的解决方法,因为它在 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']
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

这是因为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 这里。


查看完整回答
反对 回复 2022-06-16
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果您希望输出是数组数组。尝试这个:


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"));


查看完整回答
反对 回复 2022-06-16
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

但它不应该返回吗


我不确定你想在那里向我们展示什么,但如果你的意思是


[['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.


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信