以下是相关代码:
const array = [
1, 2, 3
]
array.map(item => {
item = item + 1
})
console.log(array)
我认为item
方法中的map
(第一个)参数是对数组中原始项的引用,并且直接改变它会改变第一个数组的内容。那不是真的吗?
答案 0 :(得分:3)
map
函数返回一个新数组,它不会改变原来的数组。
item
是arrow function item => {...}
中的局部变量。赋值item = item + 1
不会更改原始元素,而是更改item
局部变量。
如果您想更改元素forEach
,则函数更有效,因为它不会创建新数组:
array.forEach((item, index) => {
array[index] = item + 1;
});
答案 1 :(得分:3)
您的数组包含基元类型元素(此处为整数)。类型原语的变量不能通过其引用进行变异。如果例如数组的元素是对象,则可以进行变异,如下所示:
let tappedNode = self.sceneView.hitTest(gesture.location(in: gesture.view), options: [:])
if !tappedNode.isEmpty {
let node = tappedNode[0].node
node.removeFromParent()
} else {
// add my new node
}
答案 2 :(得分:1)
Mozilla说;
map()方法创建一个新数组,其中包含调用a的结果 为调用数组中的每个元素提供了函数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
因此,map函数不会改变数组的值。
我知道你不想这样,但你可以使用它:
const array = [
1, 2, 3
]
array.map((item, k) => {
array[k] = item + 1
})
console.log(array)