为啥“return”与“console.log()”不一样[重复]
Posted
技术标签:
【中文标题】为啥“return”与“console.log()”不一样[重复]【英文标题】:why does "return" doesn't work the same as "console.log()" [duplicate]为什么“return”与“console.log()”不一样[重复] 【发布时间】:2018-06-09 13:46:10 【问题描述】:所以基本上,我只是想将 100 添加到数组 test
中可被 3 整除的元素并打印出 test
数组。我不明白的是,当我在函数中使用 console.log(test)
时,它会打印出满足条件的数组,即 100 添加到可被 3 整除的元素中,但是当我在函数之外使用它时,它没有。这是为什么?有没有办法在函数之外打印出满足条件的测试数组?我刚开始学习javascript,所以我还是个初学者。
var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
19, 300, 3775, 299, 36, 209, 148, 169, 299,
6, 109, 20, 58, 139, 59, 3, 1, 139
];
test.forEach(function(test)
if(test % 3 === 0)
test+=100;
console.log(test);//prints out test array if condition met
);
//console.log(test); //doesn't print test array with if condition met????
【问题讨论】:
您需要将更新的值存储回您的数组,而您没有这样做。对于您的情况,您可以使用array#map
。
forEach
不会更改数组,并且从您传递给forEach
的函数返回一个值不会做任何事情。
你的变量数组 test 和元素也被命名为 test。用 s 调用数组测试是个好主意
@Phil 那行不通,OP 想要整个 test
数组将 100 添加到可被 3 整除的数字上。
@BlueEagle 请阅读我链接的原始问题,它展示了如何使用forEach
来更改数组。如果你想使用map
,它将返回一个新数组。这是一个非常冗长的代码,供您查看如何操作:jsfiddle.net/gmzm51hw
【参考方案1】:
forEach
方法不会直接修改原始数组,但回调函数可能会修改它。回调与元素、索引和数组本身一起传递。
var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
19, 300, 3775, 299, 36, 209, 148, 169, 299,
6, 109, 20, 58, 139, 59, 3, 1, 139
];
test.forEach(function(item, index, test)
if(item % 3 === 0)
test[index] = item+=100;
);
console.log(test);
【讨论】:
它可以工作,但函数的参数是否必须按特定顺序排列?因为当我这样做function(test,item,index)
时,代码不起作用。
@BlueEagle,是的,当然,所有参数都必须按特定顺序排列。第一个表示iteration
中的current item
,第二个表示index
,第三个表示original array
。以上是关于为啥“return”与“console.log()”不一样[重复]的主要内容,如果未能解决你的问题,请参考以下文章