繁体   English   中英

函数数组项未更新全局数组项

[英]Function array items are not updating the global array items

我循环遍历数组中的项目,并为每个项目(字符串)添加“ juice!”来更新字符串。 这不应该通过添加新字符串来更改每个字符串吗?

var fruits = ['Orange', 'Apple', 'Tomato', 'Strawberry']

fruits.forEach(function(item, index) {
  item += ' juice!';
  console.log(item);
})

console.log(fruits);

输出:

Orange juice!
Apple juice!
Tomato juice!
Strawberry juice!
[ 'Orange', 'Apple', 'Tomato', 'Strawberry' ]

预期产量:

Orange juice!
Apple juice!
Tomato juice!
Strawberry juice!
[ 'Orange juice!', 'Apple juice!', 'Tomato juice!', 'Strawberry juice!' ]

字符串是不可变的。 +=指向引用字符串的变量名将创建一个全新的字符串 ,并将新字符串分配给该变量名和仅该变量名。

如果另一个变量持有对原始字符串的引用,则不会更改它。 在这里,一个item正在重新分配,但是fruits数组保持不变,因为您从未分配过fruits[0]fruits[1]等。

要创建一个新的数组,请在结尾处像fruits[index] = item那样重新分配,或使用.map

 var fruits = ['Orange', 'Apple', 'Tomato', 'Strawberry'] const newFruits = fruits.map(function(item, index) { item += ' juice!'; console.log(item); return item; }) console.log(newFruits); 

尝试使用const.map()

 const fruits = ['Orange', 'Apple', 'Tomato', 'Strawberry'] const fruitJuice = fruits.map(fruit => (fruit.concat(' juice!'))) console.log(fruitJuice) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM