此功能正常运行:
function task02(arr) {
var out = [];
arr = arr.forEach(function(item, i){
(item > 0) ? out.push(1) : out.push(0);
});
return out;
}
这不是(输出undefined
):
function task02(arr) {
arr = arr.forEach(function(item, i){
(item > 0) ? item = 1 : item = 0;
});
return arr;
}
我已尝试同时使用item
和item[i]
,但它无效。有人可以向我解释,为什么这不起作用?
答案 0 :(得分:4)
有人可以向我解释,为什么这不起作用?
JavaScript是pass/call/assign by value。这意味着为变量赋值不会神奇地改变另一个变量(或数组元素)的值。
更简单的例子:
var foo = 42;
var bar = foo;
foo = 21;
bar
仍具有值42
。
在您的情况下,分配给item
不会更改数组元素。
与往常一样,如果您使用不熟悉的方法,read its documentation first。
答案 1 :(得分:3)
第二个示例中的回调函数没有任何副作用。它只是迭代数组,进行比较,就是这样。这是.forEach
(迭代数组但返回undefined
)和迭代的.map
,.filter
,.reduce
等数组方法之间的主要区别,对每个项执行回调并返回修改后的数组。
如果要避免临时数组,在这种情况下应使用Array.map
:
function task02(arr) {
return arr.map(function(item, i){
return (item > 0) ? 1 : 0;
});
}