我正在使用以下比较方法执行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()
函数内部的数组并删除重复项?
最佳
答案 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);