为什么我不能对阵列进行排序和重复数据删除?

时间:2018-08-07 02:29:19

标签: javascript

如果没有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
}
*/

3 个答案:

答案 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函数除了告诉排序算法要比较的两个元素之间的关系外,没有其他工作。