为啥“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()”不一样[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥一个已解决的承诺仍处于待处理状态?

为啥console.log() 被认为比alert() 更好?

为啥“console.log()”在这个网站上不起作用?

为啥 console.log 从日志中排除我的零?

为啥console.log in react 运行两次

为啥 console.log.apply() 会抛出非法调用错误? [复制]