如何制作具有唯一元素的数组(即删除重复项)? [英] How do I make an array with unique elements (i.e. remove duplicates)?
问题描述
我有这个代码:
var ar = [10,7,8,3,4,7,6];
function isin(n,a){
for (var i=0;i<a.length;i++){
if (a[i]== n) {
var b = true;
return b;
} else {
var c = false;
return c;
}
}
}
function unique(a){
var arr = [];
for (var i=0;i<a.length;i++){
if (!isin(a[i],arr)){
arr.push(a[i]);
}
}
return arr;
}
alert(unique(ar));
在这段代码中,我尝试从原始数组中创建新的唯一数组(没有重复).但是我还是得到了原来的数组!我的错误在哪里?
In this code, I try to create new unique array (without duplicates) out of the original one. But I still get the original array! Where's my mistake?
推荐答案
使用普通数组并返回关联数组的键(仅包含给定数组中的唯一"值)更有效:
Using a plain array and returning the keys of associative array (containing only the "unique" values from given array) is more efficient:
function ArrNoDupe(a) {
var temp = {};
for (var i = 0; i < a.length; i++)
temp[a[i]] = true;
var r = [];
for (var k in temp)
r.push(k);
return r;
}
$(document).ready(function() {
var arr = [10, 7, 8, 3, 4, 3, 7, 6];
var noDupes = ArrNoDupe(arr);
$("#before").html("Before: " + arr.join(", "));
$("#after").html("After: " + noDupes.join(", "));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="before"></div>
<div id="after"></div>
注意:该函数不保留项目的顺序,所以如果这很重要,请使用不同的逻辑.
Note: The function does not preserve the order of the items, so if this is important use different logic.
从 IE9 和所有其他现代浏览器(例如 Chrome、Firefox)开始,通过使用 Object.keys()
方法,这可以变得更加高效:
As of IE9 and on all other modern browsers (e.g. Chrome, Firefox) this can become even more efficient by using the Object.keys()
method:
function ArrNoDupe(a) {
var temp = {};
for (var i = 0; i < a.length; i++)
temp[a[i]] = true;
return Object.keys(temp);
}
$(document).ready(function() {
var arr = [10, 7, 8, 3, 4, 3, 7, 6];
var noDupes = ArrNoDupe(arr);
$("#before").html("Before: " + arr.join(", "));
$("#after").html("After: " + noDupes.join(", "));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="before"></div>
<div id="after"></div>
感谢 wateriswet 引起我的注意.:)
这篇关于如何制作具有唯一元素的数组(即删除重复项)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!