javascript排序没有多个条目

时间:2018-05-05 11:18:31

标签: javascript arrays sorting

这是我的代码

var array1 = [1,1, 30, 4, 21];
array1.sort();
console.log(array1);
// expected output: Array [1, 21, 30, 4]

我想得到结果[1,4,21,30]。 sort函数应该给出预期的结果[1,1,4,21,30]它没有给出。此外,我应该采取什么方法来保持一个“1”?因为我不想重复

enter image description here

5 个答案:

答案 0 :(得分:6)

您可以合并sort()reduce(),只考虑includes在IE中不起作用的后果,您可以在声明下方的代码段中看到

a.includes(x) ? a : [...a, x]

表示一个if语句,用于删除重复元素并返回每个元素的单个值

var array1 = [1,1, 30, 4, 21];
var sortedArray1 = array1.reduce((a, x) => a.includes(x) ? a : [...a, x], []).sort()
console.log(sortedArray1);
// expected output: Array [1, 21, 30, 4]

答案 1 :(得分:4)

sort之后,你可以filter你的数组来摆脱重复。

下面

var array1 = [1,1, 30, 4, 21];
array1.sort((a, b) => a - b);
var s = array1.filter(function(i, o) {
    return array1.indexOf(i) == o;
});

console.log(s)

答案 2 :(得分:4)

ES6

您还可以使用new Set([])Spread_syntax来获取所需的结果。

<强>样本

let arr= [1,1, 30, 4, 21];

arr = arr.sort((a,b)=>a-b);

console.log([...new Set(arr)])
.as-console-wrapper {max-height: 100% !important;top: 0;}

答案 3 :(得分:2)

您可以同时使用sortfilter。首先使用条件sort的{​​{1}}将为您提供一个带有重复值的升序值的数组,并使用a>b将从已排序的数组中删除重复项。

&#13;
&#13;
filter
&#13;
&#13;
&#13;

  

我建议使用var array1 = [1,1, 30, 4, 21]; function sort_unique(arr) { return arr.sort((a, b) => a>b).filter((el,i,a) => i==a.indexOf(el)); } var res = sort_unique(array1); console.log(res);,因为indexOf()在IE中不起作用   浏览器

答案 4 :(得分:1)

简而言之后,尝试过滤uniqueValues

var array1 = [1,1, 30, 4, 21];
array1.sort(function(a, b){return a-b});
var uniqueValues = [];


 $.each(array1, function(i, el){
        if($.inArray(el, uniqueValues) === -1) uniqueValues.push(el);
    });

console.log(uniqueValues);

Result Here: