【发布时间】:2016-01-28 07:39:41
【问题描述】:
我在 FreeCodeCamp 上解决挑战。下面的代码通过了他们的测试和标记为已解决的挑战,但我自己的测试没有通过,我只是不明白为什么......
function chunk(arr, size) {
if (size >= arr.length || size <= 0)
return [arr];
var result = [];
var i = 0;
while(arr.length > 0) {
result.push([]);
for (var j = 0; j < size && arr.length > 0; ++j) {
result[i].push(arr.shift());
}
i++;
}
return result;
}
alert(chunk(["a", "b", "c", "d"], 2) == [["a", "b"], ["c", "d"]]);
如果我正确理解了 JS 中数组的本质,Alert 应该打印 true,但它打印 false,我不知道为什么?
【问题讨论】:
-
由于数组是对象,而且对象只有在内存中都指向同一个对象时才相等,因此您不能仅使用
==来检查数组是否相等。您将需要更复杂的平等检查。不过,对于这种简单的情况,比较JSON.stringify的结果是可行的。 -
数组是对象。它们通过引用传递,因此
var a = ['a']; var b = ['a']; a==b将返回 false。 -
JSON.stringify 有效,谢谢@Yoshi!我忘了数组是对象 =(
标签: javascript arrays algorithm