从数组中删除重复的元素(利用对象)- Javascript
Removing duplicated element from array (utilizing Object) - Javascript
function removeDuplicate(num){
var out=[];
var obj={};
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
for (x in obj){
out.push(x);
}
return out;
}
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
result = removeDuplicate(theNum);
alert(theNum);
alert(result);
大家好,我是编程新手,我不知道这个解决方案是如何工作的,在我看来它是为该数组中的每个元素将零分配给该对象......?
对于对象中的每个 x,将它们插入数组?...此时 X 的值是多少?
非常感谢您的帮助
它可以添加任何值。它可以是 1 或 100 或任何字符串、对象等。
所有代码都在遍历数组。
它获取值并将其用作对象的键。
键用于向对象添加值。如果键重复,它只是用相同的值覆盖它。
比代码只是遍历对象的键来获取唯一值。
基本上,这就像一个散列集。
这for loop
将数组中的每个元素映射到0。
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
// result obj
obj = {1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0}
这 for loop
将 obj
中的所有键复制回数组。
for (x in obj){
out.push(x);
}
// result array
out = [1, 2, 3, 4, 5, 6, 7]
希望对您有所帮助。
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
var uniqueNum = [];
function removeDuplicate()
{
$.each(theNum, function(i, el){
if($.inArray(el, uniqueNum) === -1) uniqueNum.push(el);
});
alert(theNum);
alert(uniqueNum);
}
这里你其实需要理解这部分:
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
num[x]
将有重复的值,因此每次出现重复值时,它都会再次覆盖相同的值。例如:
在第一次迭代中:
obj[num[x]] = obj[num[0]] = obj[1] = 0;
在第二次迭代中:
obj[num[x]] = obj[num[1]] = obj[1] = 0; //Since num[1] is again 1;
等等。
所以在上面的两次迭代中,你都覆盖了相同的值。因此 for 循环结果为:
obj = {
1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0
}
然后在下一个 for 循环中,您只需提取 keys
(1,2,..) 和 return 即可:
for (x in obj){
out.push(x);//Push all the keys 1,2,3...
}
return [1,2,3...]//out
function removeDuplicate(num){
var out=[];
var obj={};
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
for (x in obj){
out.push(x);
}
return out;
}
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
result = removeDuplicate(theNum);
alert(theNum);
alert(result);
大家好,我是编程新手,我不知道这个解决方案是如何工作的,在我看来它是为该数组中的每个元素将零分配给该对象......?
对于对象中的每个 x,将它们插入数组?...此时 X 的值是多少?
非常感谢您的帮助
它可以添加任何值。它可以是 1 或 100 或任何字符串、对象等。
所有代码都在遍历数组。 它获取值并将其用作对象的键。 键用于向对象添加值。如果键重复,它只是用相同的值覆盖它。 比代码只是遍历对象的键来获取唯一值。
基本上,这就像一个散列集。
这for loop
将数组中的每个元素映射到0。
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
// result obj
obj = {1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0}
这 for loop
将 obj
中的所有键复制回数组。
for (x in obj){
out.push(x);
}
// result array
out = [1, 2, 3, 4, 5, 6, 7]
希望对您有所帮助。
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
var uniqueNum = [];
function removeDuplicate()
{
$.each(theNum, function(i, el){
if($.inArray(el, uniqueNum) === -1) uniqueNum.push(el);
});
alert(theNum);
alert(uniqueNum);
}
这里你其实需要理解这部分:
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
num[x]
将有重复的值,因此每次出现重复值时,它都会再次覆盖相同的值。例如:
在第一次迭代中:
obj[num[x]] = obj[num[0]] = obj[1] = 0;
在第二次迭代中:
obj[num[x]] = obj[num[1]] = obj[1] = 0; //Since num[1] is again 1;
等等。
所以在上面的两次迭代中,你都覆盖了相同的值。因此 for 循环结果为:
obj = {
1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0
}
然后在下一个 for 循环中,您只需提取 keys
(1,2,..) 和 return 即可:
for (x in obj){
out.push(x);//Push all the keys 1,2,3...
}
return [1,2,3...]//out