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], [])