这是我的代码
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”?因为我不想重复
答案 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)
您还可以使用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)
您可以同时使用sort
和filter
。首先使用条件sort
的{{1}}将为您提供一个带有重复值的升序值的数组,并使用a>b
将从已排序的数组中删除重复项。
filter
&#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);