.map为每次迭代返回结果数组的长度?

fli*_*m57 0 javascript

var king = [1,2,3,4];
var kong = [55,77];
var thor = king.map(function(num) { return num + 1 });
var pan = king.map(function(num) { return kong.push(num) });

console.log(kong); // [55, 77, 1, 2, 3, 4]
console.log(thor); // [2, 3, 4, 5]
console.log(pan); // [3, 4, 5, 6] ??
Run Code Online (Sandbox Code Playgroud)

我以为我明白.map正在做什么,但在玩完之后,我发现了一个让我困惑的结果.对于console.log(pan)的结果,我期待:

[[55, 77, 1], [55, 77, 1, 2], [55, 77, 1, 2, 3], [55, 77, 1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

但结果是:

[3, 4, 5, 6] 
Run Code Online (Sandbox Code Playgroud)

它看起来像是返回每个结果数组的长度?困惑.

Den*_*ret 5

来自MDN:

push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度.

你有一系列的长度.

这是你想要的实现(不改变kong,因为它总是感觉更好):

var pan = king.reduce(function(arr, num) {
  arr.push((arr[arr.length-1]||kong).concat(num));
  return arr
}, []);
Run Code Online (Sandbox Code Playgroud)