请关闭广告过滤器!
我们检测到你可能使用了 AdBlock 或 Adblock Plus,素材鸟网站没有弹窗广告,请支持我们更好的发展下去。
你可以设定特殊规则或将素材鸟加入白名单,以便我们更好地为大家提供免费素材。
关闭
首页 博客 javascript实现数组分类统计
javascript实现数组分类统计

javascript实现数组分类统计

使用原生js实现数组的分类计算功能
浏览次数:2686  次     下载次数:0  次     下载积分:1  积分
评分:

方法一:

 let fruits =
    [{
      name: 'apple',
      value: 1
    },
    {
      name: 'apple',
      value: 2
    }, // 总计3个苹果
    {
      name: 'banana',
      value: 2
    },
    {
      name: 'banana',
      value: 3
    }]; // 总计5个香蕉
 
  let fruitTotal = [];  // 存最终数据结果
 
  // 数据按照水果名称进行归类
  let nameContainer = {}; // 针对键name进行归类的容器
  fruits.forEach(item => {
    nameContainer[item.name] = nameContainer[item.name] || [];
    //当逻辑或||时,找到为true的分项就停止处理,并返回该分项的值,否则执行完,并返回最后分项的值。
    nameContainer[item.name].push(item);
  });
 
  console.log(nameContainer, 'nameContainer'); // 按照水果名称归类完成:{ apple: Array(2), banana: Array(2) }
 
  // 统计不同种类水果的数量
  let fruitName = Object.keys(nameContainer); // 获取水果种类:["apple", "banana"]
  console.log(fruitName, 'fruitName')
  fruitName.forEach(nameItem => {
    let count = 0;
    nameContainer[nameItem].forEach(item => {
      count += item.value; // 遍历每种水果中包含的条目计算总数
    });
    fruitTotal.push({ 'name': nameItem, 'total': count });
  });
 
  console.log(fruitTotal);
  // 输出结果:
  // [{ name: "apple", total: 3 },
  //  { name: "banana", total: 5 }]
  //筛选含有同一个属性的值,存放在一个数组对象里

方法二:利用数组Array.reduce函数处理,代码更加简洁

let fruits2 =
    [{
      name: 'apple',
      value: 0.1
    },
    {
      name: 'apple',
      value: 0.2
    },
    {
      name: 'banana',
      value: 0.3
    },
    {
      name: 'banana',
      value: 0.4
    }];
  let oldArray = JSON.parse(JSON.stringify(fruits2))
  let newArray = []
  newArray = oldArray.reduce((total, cur, index) => {
    if (total) {
      let hasValue = total.findIndex(current => {
        return current.name === cur.name
      })
      // total 中不包含这一项,则push到数组
      hasValue === -1 && total.push(cur)
      // total 中包含这项,则累加需要统计的数值
      hasValue !== -1 && (total[hasValue].value = (total[hasValue].value.toFixed(2) * 10 + cur.value.toFixed(2) * 10) / 10)
      return total
    }
  }, [])
 
  console.log(newArray)

原文地址:https://www.jianshu.com/p/4b037374b1ec

0人收藏
0人点赞
本站素材来自用户分享,仅限学习交流请勿用于商业用途。如损害你的权益请联系客服QQ:201240120 给予处理。

热卖云服务器低至61元/年

2核2G 3M带宽 流量放心用

立即查看
相关文章
上传资源赚积分
推荐文章
共0条评论
最新评论
还没有评论哦!