已知 list 数组请写出一段代码,实现功能: 数组内type 相同的元素只保留 votes 最大的元素,并且元素需要按照 votes 从大到小排序。

题目

var list = [{type:1, des:"dddd", votes:80},
            {type:2, des:"dddd", votes:60},
            {type:3, des:"dddd", votes:70},
            {type:1, des:"dddd", votes:50},
            {type:3, des:"dddd", votes:80},
            {type:8, des:"dddd", votes:80},
            {type:9, des:"dddd", votes:20},
            {type:1, des:"dddd", votes:100},
            {type:3, des:"dddd", votes:30}]

分析

读题:首先第一步需要将type等于1的挑选出来,只保留最大的元素,

 然后需要将数组以votes从大到小排列

代码

var list = [
        { type: 1, des: "dddd", votes: 80 },
        { type: 2, des: "dddd", votes: 60 },
        { type: 3, des: "dddd", votes: 70 },
        { type: 1, des: "dddd", votes: 50 },
        { type: 3, des: "dddd", votes: 80 },
        { type: 8, des: "dddd", votes: 80 },
        { type: 9, des: "dddd", votes: 20 },
        { type: 1, des: "dddd", votes: 100 },
        { type: 3, des: "dddd", votes: 30 },
      ];

      // 使用 reduce 方法合并相同 type 的元素,并保留 votes 最大的那个
      var result = list.reduce((accumulator, currentItem) => {
        // 查找 accumulator 中是否已经有一个相同 type 的元素
        var existingItem = accumulator.find(
          (item) => item.type === currentItem.type
        );
        // 如果没有找到,或者找到的元素的 votes 比当前元素的 votes 小,则添加或替换当前元素
        if (!existingItem || existingItem.votes < currentItem.votes) {
          if (!existingItem) {
            accumulator.push(currentItem);
          } else {
            existingItem.votes = currentItem.votes;
            // 如果你想完全替换 existingItem,你可以这样做:
            // accumulator[accumulator.indexOf(existingItem)] = currentItem;
          }
        }
        return accumulator;
      }, []);

      // 使用 sort 方法对结果按照 votes 从大到小排序
      result.sort((a, b) => b.votes - a.votes);
      console.log(result);

效果图

结语

点个赞啦!

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苦逼的猿宝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值