Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:.push不是一个函数_Javascript_Arrays - Fatal编程技术网

Javascript:.push不是一个函数

Javascript:.push不是一个函数,javascript,arrays,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,ar

我的代码有问题:

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]

据我所知,这是因为它将数组参数视为数组以外的东西。但是,我想我给它输入了变量“current”,它是一个数组。有人能解释一下这个问题吗?谢谢。

仅返回阵列,请参见以下内容:

var数组=[[1,2,3]、[4,5]、[6];
log(reduce(数组,函数)(数组,b){
阵列推送(b);
返回数组;
}));
函数缩减(数组、组合){
var电流=[];
for(var i=0;i不返回数组。它返回调用它的数组的新长度

因此,您的
返回数组。push(b);
返回一个
int
。该int作为
array
…返回,该数组不是数组,因此它没有
.push()
方法

您需要执行以下操作:

array.push(b);
return array;

我不明白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;
}
函数缩减(数组、组合){
var电流=[];

对于(var i=0;i这里的问题是
array.push(b)
返回
数组的新长度
第一次,数组的长度将被返回,
current
将成为一个
integer
,并且由于
current
是传递给
combine(current,array[i])
的值,在下一次迭代中,JavaScript抛出
TypeError
应如下所示:

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

您的实现中似乎存在问题:

function(array, b) {
  return array.push(b);
}
此函数返回的不是数组

return array.push(b);
返回执行推送后数组的长度

因此,您应该将函数修改为:

function(array, b) {
  array.push(b);
  return array;
}
这可能会奏效。祝你好运!

ES6解决方案:

reduce([1, 2, 3, 4], (array, b) => [...array, b], [])

是的,刚刚捕捉到。谢谢。为什么不使用内置的[].reduce()?
array.push
返回下一个可用的
索引
,并且不能对数字使用
push
。您是否意识到您可以这样做:
var flatten=[].concat.apply([],array)
以获得相同的结果?您拥有所有这些日志记录,但最有用的地方应该是在第一个reduce()调用中的
console.log(array)
,因为该变量及其对应的.push()就是您得到此错误的地方。我相信将其命名为
array
只是个人偏好。是的,array.push()返回数组的长度,因此当在下一次迭代中调用combine时,current不再设置为数组,而是设置为int。虽然这样可以解决问题,但请解释问题的原因,以便OP或任何其他阅读此内容的用户不会再问同样的问题Hanks man,我没有意识到返回数组。push没有帽子。真不敢相信我没有犯这样容易的错误。
function(array, b) {
  array.push(b);
  return array;
}
reduce([1, 2, 3, 4], (array, b) => [...array, b], [])