【发布时间】:2019-12-20 15:45:33
【问题描述】:
我想让这样的函数在 JavaScript 中按预期工作:
function isLastElem(array, elem) {
if (elem === array[array.length-1]) {
return true;
}
else {
return false;
}
}
目的是该函数应该能够识别任何数组的最后一个元素。例如:
let arr = [0, 1, 2];
console.log(isLastElem(arr, 2)); // I would expect false to be returned
console.log(isLastElem(arr, arr[2])); // I would expect true to be returned
但是,由于数字是原始值,它们通过它们的值传递给函数,因此两个函数调用都返回 true。 有什么办法可以解决这个问题并通过引用传递数字?
这里的重要想法是让它在每个循环中都可用。例如:
let arr = [0, 1, 0];
arr.forEach((elem) => {
if (isLastElem(arr, elem)) {
console.log("Found the last element!");
}
});
函数应该在第一个 0 处返回 false,因为它不是数组的最后一个元素。然后在第二个 0 它应该返回 true 并记录消息。
【问题讨论】:
-
但是 ... 2 实际上是
===到 2。所有为 2 的数值都无法区分。 -
您必须比较内存空间条目,这在 JavaScript 中是不可能的。
-
即使对于对象,您的代码也只有在您传递实际的数组元素值时才有意义。由于您必须知道索引才能执行此操作,因此将索引与数组长度进行比较会简单得多。
-
如果要传递“对数组元素的引用”,请改为传递数组和索引。在这种情况下,巧合的是
arr和2。 (讨论数组元素是否不等于索引会是一个更好的例子)。 -
所以,根据 Rager 的回应,我想要做的事情几乎是不可能的。可惜了,不过还是谢谢!
标签: javascript arrays object reference primitive