如何在数组中获得唯一值的列表?我总是必须使用第二个数组,或者在JavaScript中有类似于java的hashmap的东西吗?
我将只使用JavaScript和jQuery。不能使用其他库。
如何在数组中获得唯一值的列表?我总是必须使用第二个数组,或者在JavaScript中有类似于java的hashmap的东西吗?
我将只使用JavaScript和jQuery。不能使用其他库。
当前回答
使用jQuery,这是一个数组唯一的函数我做:
Array.prototype.unique = function () {
var arr = this;
return $.grep(arr, function (v, i) {
return $.inArray(v, arr) === i;
});
}
console.log([1,2,3,1,2,3].unique()); // [1,2,3]
其他回答
上面的大多数解决方案都具有较高的运行时复杂性。
下面是使用reduce的解决方案,可以在O(n)时间内完成工作。
Array.prototype.unique = Array.prototype.unique || function() { Var arr = []; 这一点。Reduce(函数(哈希,num) { If (typeof hash[num] === 'undefined') { Hash [num] = 1; arr.push (num); } 返回哈希; }, {}); 返回arr; } var myArr = [3,1,2,3,3,3]; console.log (myArr.unique ());/ /(3、1、2);
注意:
这个解决方案不依赖于reduce。其思想是创建一个对象映射,并将唯一的对象推入数组。
一行代码,纯JavaScript
使用ES6语法
List = List。filter((x, i, a) => a. indexof (x) === i)
x --> item in array
i --> index of item
a --> array reference, (in this case "list")
使用ES5语法
list = list.filter(function (x, i, a) {
return a.indexOf(x) === i;
});
浏览器兼容性:IE9+
如果您不需要太担心旧的浏览器,这正是set的设计目的。
Set对象允许您存储任何类型的惟一值 原语值或对象引用。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
const set1 = new Set([1, 2, 3, 4, 5, 1]);
// returns Set(5) {1, 2, 3, 4, 5}
这里有一个更清晰的ES6解决方案,我看到这里没有包括它。它使用Set和展开操作符:…
var a = [1, 1, 2];
[... new Set(a)]
返回[1,2]
快速,紧凑,无嵌套循环,适用于任何对象,不只是字符串和数字,接受谓词,只有5行代码!!
function findUnique(arr, predicate) {
var found = {};
arr.forEach(d => {
found[predicate(d)] = d;
});
return Object.keys(found).map(key => found[key]);
}
示例:按类型查找唯一项:
var things = [
{ name: 'charm', type: 'quark'},
{ name: 'strange', type: 'quark'},
{ name: 'proton', type: 'boson'},
];
var result = findUnique(things, d => d.type);
// [
// { name: 'charm', type: 'quark'},
// { name: 'proton', type: 'boson'}
// ]
如果你想让它找到第一个唯一的项目,而不是最后一个,在那里添加一个find . hasownproperty()检查。