实用且不常见的数组方法

一、对数组进行分类:array.groupBy

首先有一个数组

let list = [
  { name: "vue", value: "10" },
  { name: "react", value: "10" },
  { name: "angular", value: "10" },
  { name: "vue", value: "20" },
  { name: "react", value: "20" },
  { name: "angular", value: "20" },
];

我们需要对数组按类别进行分组统计,变成如下格式,我们该怎么实现?

let res = {
  vue: [
    { name: "vue", value: "10" },
    { name: "vue", value: "20" }
  ],
  react: [
    { name: "react", value: "10" },
    { name: "react", value: "20" }
  ],
  angular: [
    { name: "angular", value: "10" },
    { name: "angular", value: "20" }
  ],
};

通常的实现方式是通过循环比较,如下 

let resObj = {};
for (let index = 0; index < list.length; index++) {
  const element = list[index];
  resObj[element.name] = resObj[element.name] || [];
  resObj[element.name].push(element);
}
// resObj = {
//   vue: [ { name: "vue", value: "10" }, { name: "vue", value: "20" } ],
//   react: [ { name: "react", value: "10" }, { name: "react", value: "20" } ],
//   angular: [ { name: "angular", value: "10" }, { name: "angular", value: "20" } ]
// };

 但是,这样写很繁琐,这个时候如果使用array.groupBy() 就方便多了

let resObj = list.groupBy(item => item.name);
// resObj = {
//   vue: [ { name: "vue", value: "10" }, { name: "vue", value: "20" } ],
//   react: [ { name: "react", value: "10" }, { name: "react", value: "20" } ],
//   angular: [ { name: "angular", value: "10" }, { name: "angular", value: "20" } ]
// };

二、更灵活的 Map :array.flatMap() 

但有时,我们需要跳过数组中的某些元素,并返回新的数组。通常做法

let arr = [1, 2, 3, 4];
let resArr = arr.filter((x) => x !== 1).map((x) => x * 3);
// resArr = [ 6, 9, 12 ];

使用 map 和 filter 结合的方式固然可以解决我们的需求,但多个方法的结合让代码看起来不那么简洁易读。可以使用flatMap 方法更简单的实现。

let arr = [1, 2, 3, 4];
let resArr = arr.flatMap((x) => (x === 1 ? [] : [x * 3]));
// resArr = [ 6, 9, 12 ];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小•愿望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值