gpt4 book ai didi

javascript - 对这种行为感到非常困惑(返回数组的唯一元素的简单函数)

转载 作者:行者123 更新时间:2023-11-28 13:24:06 24 4
gpt4 key购买 nike

这是我的代码:

uniq = function(array) {
var result = [];
for (var i = 0; i < array.length; i++) {
console.log(array[i], " is in ", result, (array[i] in result));
if (!(array[i] in result)) {
result.push(array[i]);
} else {}
}
return result;
};

uniq([1, 2, 3, 3, 4, 4]);

输出是:

1 ' 在 ' [] false 中

2 ' 在 ' [ 1 ] false 中

3 ' 位于 ' [ 1, 2 ] false 中

3 ' 位于 ' [ 1, 2, 3 ] false <--- HUH?

4 ' 在 ' [ 1, 2, 3, 3 ] false 中

4 ' is in ' [ 1, 2, 3, 3, 4 ] true <--- 现在可以正常工作了

有人可以告诉我吗?为什么 (!(array[i] in result)) 第一次计算结果不为 true,但第二次却计算为 true?

最佳答案

p in o 表示“对象 o 是否具有名为 p 的属性”(或者在数组的情况下,等效于“数组 >o 有一个索引 p"),而不是“数组 o 是否有一个 p ”。 [1, 2, 3] 具有索引 012 - 没有 3. [1, 2, 3, 3, 4] 的索引从 04,因此 4 是“在”。

使用 result.indexOf(array[i]) !== -1 作为成员资格测试(但要注意它 doesn't work in IE<9 (点击“显示过时的浏览器”),并且您需要通过循环手动执行此操作,或使用通过循环执行此操作的填充程序 - 即 slooooow)

评论中提到的另一种方法是哈希表方法,但受到更多限制。

var uniq = function(array) {
var result = [];
var hash = {};
for (var i = 0; i < array.length; i++) {
if (!hash[array[i]]) {
result.push(array[i]);
hash[array[i]] = true;
}
}
return result;
}

这不依赖于任何新功能,应该可以在任何地方工作,并且相当快 - 它只是花费更多的内存。

关于javascript - 对这种行为感到非常困惑(返回数组的唯一元素的简单函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com