如果没有if(a !== b)...
,它将对数字进行很好的排序;我完全明白,但是我想到应该可以使用条件if statement
对数字进行重复数据删除,但这是行不通的。
为什么这种解决问题的方法行不通?
const myArr = [1, 5, 3, 7, 2, 5, 2, 2, 19, 11, 7]
const newArr = myArr.sort(sortFn)
function sortFn (a, b){
if(a !== b){
// Shouldn't 'if' allow me to remove duplicates?
return a-b
}
}
//working function: this one does the sort as per usual
/*
function sortFn (a, b){
return a-b
}
*/
答案 0 :(得分:2)
如果不能从数组中删除重复项,请改用过滤器
演示
const myArr = [1, 5, 3, 7, 2, 5, 2, 2, 19, 11, 7]
const newArr = myArr.sort(sortFn).filter((v,i) => myArr.indexOf(v) == i)
console.log(newArr);
function sortFn (a, b){
return a-b
}
答案 1 :(得分:0)
“如果”不允许我删除重复项吗?
否,排序永远不会删除元素。它只是改变顺序。
调用map(...)或forEach(...)会执行相同的操作:相对于数组元素为1到1。
仅filter(...)和reduce(...)会迭代并修改返回数组中的项目数。
顺便说一下,这是您的过滤功能:
function unique (value, index, self) {
return self.indexOf(value) === index;
}
myArray.sort(sortFunction).filter(unique)
答案 2 :(得分:0)
传递给compare函数进行排序,并没有您认为的那样。
比较函数为每个项目返回一个值,如果a b,则返回一个正数;如果a == b,则返回0。 如果您不返回任何内容,则它将被解释为0,即两个元素都相同,因此不需要内部重新排序。
在进行排序时,compare函数除了告诉排序算法要比较的两个元素之间的关系外,没有其他工作。