Javascript concat和push之间的区别?

Javascript concat和push之间的区别?,javascript,concatenation,push,Javascript,Concatenation,Push,为什么返回push方法会导致 未捕获类型错误:acc.push不是一个功能 但是返回concat会得到正确的解决方案吗 [1,2,3,4].reduce(函数名(acc,curr){ 如果(偶数(当前)){ 按推送返回(当前); } 返回acc; }, []); 函数偶数(数字){ 如果(编号%2==0){ 返回true; } 返回false; }acc不应是数组。看这张照片。它可以是一个,但是 将一个数组缩减为一个数组毫无意义。您需要的是过滤器。我的意思是,reduce使用数组作为累加器,从

为什么返回
push
方法会导致

未捕获类型错误:acc.push不是一个功能

但是返回
concat
会得到正确的解决方案吗

[1,2,3,4].reduce(函数名(acc,curr){
如果(偶数(当前)){
按推送返回(当前);
}
返回acc;
}, []);
函数偶数(数字){
如果(编号%2==0){
返回true;
}
返回false;

}
acc
不应是数组。看这张照片。它可以是一个,但是

将一个数组缩减为一个数组毫无意义。您需要的是
过滤器
。我的意思是,
reduce
使用数组作为累加器,从技术上讲,将每个元素浓缩到它是可行的,但这不是正确的方法

var res=[1,2,3,4]。过滤器(偶数);
控制台日志(res);
函数偶数(数字){
返回(编号%2==0);
}
推送()将元素添加到数组的末尾,并返回数组的新长度。因此,您在这里的申报无效

concat()
方法用于合并数组。Concat不会更改现有数组,而是返回一个新数组

如果您想要这样的新阵列,最好进行筛选:

var arr = [1, 2, 3, 4];
var filtered = arr.filter(function(element, index, array) {
  return (index % 2 === 0);
});
注意,假设数组arr是完整的,没有间隙-所有索引值都是偶数。如果需要每个人,请使用
元素
而不是
索引

var arr = [1, 2, 3, 4];
var filtered = arr.filter(function(element, index, array) {
  return (element% 2 === 0);
});

Concat比push慢945倍,只是因为它必须创建一个新阵列。

根据MDN文档,可以这样说:

  • 方法:将一个或多个元素添加到数组的末尾,然后返回数组的新长度
  • 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新的数组
与final的参数相结合的是数组initialize
[])
,这意味着您希望返回一个数组结果

==>这就是为什么在使用
concat
的情况下,它工作得很好的原因


重构代码
  • 如果仍要使用
    Array#reduce
    Array#推送
  • const偶数=(number)=>number%2==0;
    const result=[1,2,3,4].reduce(函数名(acc,curr){
    if(偶数(curr))acc.push(curr);//只需再添加一项,而不是返回
    返回acc;
    }, []);
    
    控制台日志(结果)
    因为
    push
    返回一个数字,而
    concat
    返回一个数组。push将数组作为一个项目、concat-concats数组或带有一个项目的数组推送到不同的返回类型旁边。我同意。这是一道考试题,我被要求用reduce重新实现过滤器。我对规格有点模糊,只是想澄清一下。假设你有一个数字数组,你想把它转换成一个这些数字的运行和的数组,例如[1,2,7,4]->[1,3,10,14]。在这种情况下,acc作为一个数组是否合适?实际上这是一个很好的方法,尤其是如果您将操作链接在一起以避免运行多个循环,如果您要将一个数组转换为具有比原始数组更短(或更长)的不同值的另一个数组,请查找“传感器和循环融合”,然后使用reduce()是完美的。我认为在这种情况下,arr.filter是一种更好的方法。尽管根据文档,您可以使用arr.reduce这种方法,但我认为人们普遍接受使用.reduce从数组中的所有值创建一个变量。
    const count = ['pigs', 'goats'].push('cows');
    console.log(count); // expected output: 3
    
    console.log(['a'].concat(['b']));// expected output: Array ["a", "b"]