the*_*ack 50 javascript arrays sorting unique
我有一个像这样的JavaScript数组:
var myData=['237','124','255','124','366','255'];
Run Code Online (Sandbox Code Playgroud)
我需要数组元素是唯一的和排序的:
myData[0]='124';
myData[1]='237';
myData[2]='255';
myData[3]='366';
Run Code Online (Sandbox Code Playgroud)
即使数组的成员看起来像整数,它们也不是整数,因为我已经将每个成员转换为字符串:
var myData[0]=num.toString();
//...and so on.
Run Code Online (Sandbox Code Playgroud)
有没有办法在JavaScript中完成所有这些任务?
lon*_*day 136
这其实很简单.如果首先对值进行排序,则更容易找到唯一值:
function sort_unique(arr) {
if (arr.length === 0) return arr;
arr = arr.sort(function (a, b) { return a*1 - b*1; });
var ret = [arr[0]];
for (var i = 1; i < arr.length; i++) { //Start loop at 1: arr[0] can never be a duplicate
if (arr[i-1] !== arr[i]) {
ret.push(arr[i]);
}
}
return ret;
}
console.log(sort_unique(['237','124','255','124','366','255']));
//["124", "237", "255", "366"]
Run Code Online (Sandbox Code Playgroud)
小智 35
在您无法预先定义函数的情况下(例如在书签中),这可能就足够了:
myData.sort().filter(function(el,i,a){return i===a.indexOf(el)})
Run Code Online (Sandbox Code Playgroud)
met*_*uzz 19
您现在可以达到的效果,在短短一个行代码.
使用新的Set将数组减少为唯一的值集.之后应用sort方法来排序字符串值.
var myData=['237','124','255','124','366','255']
var uniqueAndSorted = [...new Set(myData)].sort()
Run Code Online (Sandbox Code Playgroud)
修订以来问题的时间在JavaScript中引入了新的方法.
iol*_*leo 16
function sort_unique(arr) {
return arr.sort().filter(function(el,i,a) {
return (i==a.indexOf(el));
});
}
Run Code Online (Sandbox Code Playgroud)
pha*_*aux 13
这是我(更现代)的方法Array.protoype.reduce():
[2, 1, 2, 3].reduce((a, x) => a.includes(x) ? a : [...a, x], []).sort()
// returns [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
编辑:评论中指出的更高性能版本:
arr.sort().filter((x, i, a) => !i || x != a[i-1])
Run Code Online (Sandbox Code Playgroud)
怎么样:
array.sort().filter(function(elem, index, arr) {
return index == arr.length - 1 || arr[index + 1] != elem
})
Run Code Online (Sandbox Code Playgroud)
这类似于@loostro的答案,但不是使用indexOf,它将重复每个元素的数组以验证它是第一个找到的,它只检查下一个元素是否与当前元素不同.
尝试使用像下划线这样的外部库
var f = _.compose(_.uniq, function(array) {
return _.sortBy(array, _.identity);
});
var sortedUnique = f(array);
Run Code Online (Sandbox Code Playgroud)
这依赖于_.compose,_.uniq,_.sortBy,_.identity
查看实例
它在做什么?
我们需要一个接受数组的函数,然后返回一个已删除非唯一条目的已排序数组.这个函数需要做两件事,排序和使数组唯一.
这对于合成来说是一个很好的工作,因此我们将独特的排序功能组合在一起._.uniq可以只使用一个参数应用于数组,因此它只是传递给_.compose
_.sortBy函数需要排序条件函数.它需要一个返回值的函数,数组将按该值排序.由于我们排序的值是数组中的值,我们可以传递_.identity函数.
我们现在有一个函数组合(接受一个数组并返回一个唯一的数组)和一个函数(接受一个数组并返回一个排序的数组,按其值排序).
我们只是在数组上应用组合,我们有唯一排序的数组.
对于两个以上的重复值,此函数不会失败:
function unique(arr) {
var a = [];
var l = arr.length;
for(var i=0; i<l; i++) {
for(var j=i+1; j<l; j++) {
// If a[i] is found later in the array
if (arr[i] === arr[j])
j = ++i;
}
a.push(arr[i]);
}
return a;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112859 次 |
| 最近记录: |