如何使用 JavaScript 统计数组中重复项的次数并更新元素属性?

如何使用 JavaScript 统计数组中重复项的次数并更新元素属性?

判断数组中重复项并统计重复次数

在实际项目中,从后端获取的数组对象中,我们需要判断特定字段是否重复。比如根据其中的 "Data.NO" 来判断,并新建一个 "重复次数" 字段来显示重复的次数。

为了解决问题,我们可以使用以下方法:

  1. 使用 reduce() 方法:reduce() 函数用于累积一个数组的元素,将它们聚合为一个单一的返回值。在这个案例中,我们可以利用 reduce() 函数来统计重复项的次数。
  2. 查找数组中特定元素的索引:findIndex() 方法返回第一个匹配的元素的索引,如果未找到匹配项,则返回 -1。我们可以使用 findIndex() 方法来查找数组中重复元素的索引。
  3. 检查索引是否为 -1:如果 findIndex() 返回 -1,则表示数组中不存在与给定条件匹配的元素。
  4. 初始化一个空数组和一个计数器:我们需要创建一个新数组来存储去重后的元素,以及一个计数器来跟踪每个元素出现的次数。
  5. 遍历数组并更新元素:在 reduce() 函数的回调函数中,我们需要遍历数组中的每个元素。如果元素在去重后数组中存在(即索引不为 -1),则更新该元素的 "重複次數" 字段并递增计数器。否则,将元素添加到去重后数组中。

以下是代码示例:

let list = [
    {
        DF:343,
        Fstep: 0.2,
        NO:1004
    },
    {
        DF:344,
        Fstep: 0.2,
        NO:1005
    },
    {
        DF:345,
        Fstep: 0.2,
        NO:1004
    },
    {
        DF:346,
        Fstep: 0.2,
        NO:1004
    },
    {
        DF:347,
        Fstep: 0.2,
        NO:1006
    },
    {
        DF:348,
        Fstep: 0.2,
        NO:1005
    }
];

let newArr = [], list1 = [], i = 0;
let timer = setInterval(() => {
    if(i === list.length) {
      clearInterval(timer);
      return;
    }
    // 模拟每3s后端返回一条数据
    list1 = [list[i]];
    i++;
    fn(list1);
}, 3000);

function fn (arr) {
    newArr = arr.reduce((s, v) => {
        let index = s.findIndex(it => it.NO === v.NO);
        index !== -1  ? s[index] = {...v, startTime: s[index].startTime,
        endTime: getNowDate(), count: ++s[index].count} : s.push({...v, count: 1, startTime: getNowDate(), endTime: getNowDate()});
        return s;
    }, newArr);
    console.log(newArr);
}

// 格式化日对象
const getNowDate = () => {
  var date = new Date();
  var sign2 = ":";
  var year = date.getFullYear() // 年
  var month = date.getMonth() + 1; // 月
  var day = date.getDate(); // 日
  var hour = date.getHours(); // 时
  var minutes = date.getMinutes(); // 分
  var seconds = date.getSeconds() //秒
  var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
  var week = weekArr[date.getDay()];
  // 给一位数的数据前面加 “0”
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (day >= 0 && day <= 9) {
    day = "0" + day;
  }
  if (hour >= 0 && hour <= 9) {
    hour = "0" + hour;
  }
  if (minutes >= 0 && minutes <= 9) {
    minutes = "0" + minutes;
  }
  if (seconds >= 0 && seconds <= 9) {
    seconds = "0" + seconds;
  }
  return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds;
}

通过以上代码,我们可以遍历数组中的元素,根据 "Data.NO" 字段判断重复项,并在重复项中添加 "重複次數" 字段,统计重复的次数,并将其渲染到页面中。

以上就是如何使用 JavaScript 统计数组中重复项的次数并更新元素属性?的详细内容,更多请关注www.sxiaw.com其它相关文章!