提问者:小点点

映射后的JavaScript数组推送-返回数组的长度?


我不明白下面的这段代码是如何在这里打印数字2的。

const arr = [{
  greet: 'hi',
}];

const arr2 = arr.map(obj => obj.greet).push('bye');

console.log(arr2); // 2

首先,由于arr.map(obj=>obj.greet)将返回[“hi”],通过向该数组推入'bye',它应该是['hi','bye']。

const arr = [{
  greet: 'hi',
}];

const arr2 = arr.map(obj => obj.greet);
arr2.push('bye');

console.log(arr2); // ['hi', 'bye']

与此不同的是,如果我把它们放在一起,它返回的是2而不是['hi','bye'],这在我看来真的很奇怪。 谁能给我解释一下吗?


共3个答案

匿名用户

由于push的返回值是数组中的元素数,因此第一个示例将显示2,而第二个示例将实际显示数组内容。

https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/array/push

匿名用户

数组推送将返回数组的长度,这是您分配给arr2的长度。 参考

匿名用户

push返回追加元素后数组的长度。

可以使用扩展运算符追加到新数组:

const arr2 = [...arr.map(obj => obj.greet), 'bye']

或连接:

const arr2 = arr.map(obj => obj.greet).concat('bye')