Javascript:.push不是一个函数

时间:2015-10-16 19:06:37

标签: javascript arrays

我的代码出现问题:

var arrays = [[1, 2, 3], [4, 5], [6]];
console.log(reduce(arrays,function(array,b){
  return array.push(b);
}));

function reduce(array,combine){
  var current = [];
  for(var i = 0;i<array.length;i += 1){
    current = combine(current,array[i]);
  }
  return current;
}
console.log(reduce([1, 2, 3, 4], function(array, b) {
  return array.push(b);
}));

// → [1, 2, 3, 4, 5, 6]

我收到此错误:

TypeError: array.push is not a function (line 3) 

据我所知,这是因为它将数组参数视为数组以外的其他参数。但是,我以为我把它变成了变量&#34; current&#34;这是一个数组。有人可以解释这个问题吗?感谢。

6 个答案:

答案 0 :(得分:14)

Array.push没有返回数组。它返回调用它的数组的 new 长度。

因此,您的return array.push(b);会返回int。那个int被传递回array ...这不是一个数组,所以它没有.push()方法。

你需要这样做:

array.push(b);
return array;

答案 1 :(得分:3)

只返回数组,见下文:

http://jsfiddle.net/0en82r7t/1/

var arrays = [[1, 2, 3], [4, 5], [6]];
console.log(reduce(arrays,function(array,b){
  array.push(b);
  return array;
}));

function reduce(array,combine){
  var current = [];
  for(var i = 0;i<array.length;i += 1){
    current = combine(current,array[i]);
  }
  return current;
}
console.log(reduce([1, 2, 3, 4], function(array, b) {
  array.push(b)
  return array;
}));
  

array.push不返回数组,而是返回新长度

此外,我知道这只是一个测试,但在将来和真正的应用开发中,不要命名Array数组。使用更详细和清晰的命名,例如:numGroupArray,datesArray,timeArray,tagsArray ......

答案 2 :(得分:3)

此处的问题是<map>会返回array.push(b)的新长度。因此,在第一次调用array后,将返回数组的长度,combine(current, array[i])变为current,并且integer传递给current在下一次迭代中,JavaScript抛出combine(current, array[i])。您对TypeError的实施应如下所示:

combine(current, array[i]

答案 3 :(得分:0)

我不明白函数reduce正在做什么,但问题是Array.prototype.push返回数组的长度。

var array = [1,2,'b'];
var val = array.push('foo');
// val === 4;

因此,不要在循环的每次迭代中重新设置当前,只需简单地调用函数,因为.push()修改了数组。

function reduce(array,combine){
  var current = [];
  for(var i = 0;i<array.length;i += 1){
    combine(current,array[i]);
  }
  return current;
}

答案 4 :(得分:0)

看起来您的实施存在问题:

function(array, b) {
  return array.push(b);
}

从此函数返回的内容不是数组。

return array.push(b);
执行推送后,

返回数组的长度。

因此,您应该将您的功能修改为:

function(array, b) {
  array.push(b);
  return array;
}

这可能会成功。古德勒克!

答案 5 :(得分:0)

ES6解决方案:

php -d register_argc_argv=On composer.phar