JS Array.sort。如何从数组中删除匹配值

时间:2018-12-04 16:49:13

标签: javascript arrays sorting

我正在使用以下比较方法执行Array.sort

orderNotes(notes){
    function compare(a, b) {
      const noteA =a.updatedAt
      const noteB =b.updatedAt

      let comparison = 0;
      if (noteA < noteB) {
        comparison = 1;
      } else if (noteA > noteB) {
        comparison = -1;
      }
      return comparison;
    }
    return notes.sort(compare)
  }

现在,由于我仍然需要对数组进行排序并使用Array.sort遍历每个元素,因此我想借此机会检查note.id是否与相邻音符匹配,并删除重复的音符从数组中获取(与哪一个无关)。这将使我免于再次循环以检查重复的麻烦。

是否可以更改compare()函数内部的数组并删除重复项?

最佳

2 个答案:

答案 0 :(得分:0)

  

是否可以更改compare()函数中的数组并删除重复项?

如果元素不匹配,则可以从元素中.splice(...),但实际上是这样:

  

这将使我免于再次循环以检查重复的麻烦。

是一个误解。循环一个数组并执行两个任务只会比两个循环稍快一点,因为只有循环部分被复制了,而不是循环中完成的任务。因此就是:

  const ids = new Set;
  const result = array
    .filter(it => ids.has(it.id) && ids.add(it.id))
    .sort((a, b) => a.updatedAt - b.updatedAt);

答案 1 :(得分:0)

使用Array.prototype.reduce除去重复步骤而不是进行排序,可能是更简单的解决方案:

//Starting with your ordered array
var ordered = [1, 1, 2, 3, 3, 3, 4, 5, 6, 7, 7, 8, 9, 9, 9];

//Now create a new array excluding the duplicates
var orderedAndUnique = ordered.reduce((accum, el) => {
  if (accum.indexOf(el) == -1) {
    accum.push(el);
    return accum;
  }
  return accum;
}, []);

console.log(orderedAndUnique);