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

时间:2016-07-20 14:37:55

标签: 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] ??

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

[[55, 77, 1], [55, 77, 1, 2], [55, 77, 1, 2, 3], [55, 77, 1, 2, 3, 4]]

然而,结果是:

[3, 4, 5, 6] 

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

6 个答案:

答案 0 :(得分:5)

来自the MDN

  

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

你有一系列长度。

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

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

答案 1 :(得分:2)

您可以改为使用concat()

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

console.log(pan); 

答案 2 :(得分:2)

push返回数组长度。所以你有很多长度。

您可以通过以下方式实现目标:

var pan = king.map(function(num) { 
    kong.push(num);
    return kong.slice(); // create array copy!
});

不要忘记复制数组,否则你会得到一个与元素相同的数组。

答案 3 :(得分:1)

kong

无破坏性的解决方案



var king = [1, 2, 3, 4];
var kong = [55, 77];

var pan = king.map(function(_, i) {
  return kong.concat(king.slice(0, i + 1));
});
console.log(pan);




答案 4 :(得分:0)

map将您指定的函数应用于数组中的每个元素。所以它给你的答案对于第一个数组是正确的

答案 5 :(得分:-1)

您不需要手动推送地图内的元素。 map操作将您的函数应用于数组的每个元素,并根据结果返回一个新数组。

说实话,这是地图方法的全部目的。