我是面向对象编码的新手。练习时我发现了这个例子。
令人困惑;每当我们将数组传递给函数时,它就会删除重复项。
我想知道重复的值在哪里,它们如何消失以及它如何对数组进行排序?
任何人都可以深入解释我。我是面向对象概念的新手。
function duplicate(arr) {
var i, len = arr.length,
obj = {};
for (i = 0; i < len; i += 1) {
obj[arr[i]] = 0;
}
return obj;
}
//calling function
console.log(
duplicate([1, 2, 3, 4, 4, 3, 2, 1, 0, -1, 10, 100])
);
// result::{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 10: 0, 100: 0, -1: 0}
&#13;
答案 0 :(得分:0)
这是一种非常奇怪的方式,但我已经对代码进行了评论,以便更容易理解。
function duplicate(arr) {
// declare variables
var i, len = arr.length,
obj = {};
// for each item in the array
for (i = 0; i < len; i += 1) {
// create or set key within obj named the current array item with the value 0
obj[arr[i]] = 0;
}
// return the created object
return obj;
}
//calling function and passing the array
console.log(duplicate([1, 2, 3, 4, 4, 3, 2, 1, 0, -1, 10, 100]))
这是有效的,因为当设置密钥时它是唯一的,因此再次调用将编辑现有条目而不添加另一条。
使这更好的一种快速方法是仅返回对象键而不是整个对象。您可以将return obj;
更改为return Object.keys(obj);