为什么返回push方法会导致"Uncaught TypeError:acc.push不是函数".但是返回concat会产生正确的解决方案吗?
[1, 2, 3, 4].reduce(function name(acc, curr) {
  if (even(curr)) {
    return acc.push(curr);
  }
  return acc;
}, []);
function even(number) {
  if (number % 2 === 0) {
    return true;
  }
  return false;
}Run Code Online (Sandbox Code Playgroud)
[1, 2, 3, 4].reduce(function name(acc, curr) {
  if (even(curr)) {
    return acc.concat(curr);
  }
  return acc;
}, []);
function even(number) {
  if (number % 2 === 0) {
    return true;
  }
  return false;
}Run Code Online (Sandbox Code Playgroud)
Mar*_*iss 46
所述push()添加元素添加到数组的末尾,并返回该数组的新长度.因此,您在此返回无效.
该concat()方法用于合并数组.Concat不会更改现有数组,而是返回一个新数组.
最好过滤,如果你想要一个像这样的新数组:
var arr = [1, 2, 3, 4];
var filtered = arr.filter(function(element, index, array) {
  return (index % 2 === 0);
});
Run Code Online (Sandbox Code Playgroud)
请注意,假设数组arr完整且没有间隙 - 所有甚至是索引值.如果您需要每个人,请使用element而不是index
var arr = [1, 2, 3, 4];
var filtered = arr.filter(function(element, index, array) {
  return (element% 2 === 0);
});
Run Code Online (Sandbox Code Playgroud)
        Ngu*_*ong 13
根据MDN文档说:
push()方法:将一个或多个元素添加到数组末尾并返回数组的新长度。const count = ['pigs', 'goats'].push('cows');
console.log(count); // expected output: 3
Run Code Online (Sandbox Code Playgroud)
concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组console.log(['a'].concat(['b']));// expected output: Array ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
与finalArray#reduce的参数结合的是数组initialize []),这意味着您要返回一个数组结果。
==>这就是为什么你使用效果良好的原因concat。
Array#reduce和Array#pushconst count = ['pigs', 'goats'].push('cows');
console.log(count); // expected output: 3
Run Code Online (Sandbox Code Playgroud)
Array#filterconsole.log(['a'].concat(['b']));// expected output: Array ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
acc不应该是一个数组。查看文档。它可以是一个,但是..
reduce数组到数组完全没有意义。你想要的是filter. 我的意思是,reduce使用数组作为累加器并将concat每个元素放入它在技术上确实可行,但这不是正确的方法。
var res = [1, 2, 3, 4].filter(even);
console.log(res);
function even(number) {
  return (number % 2 === 0);
}Run Code Online (Sandbox Code Playgroud)
https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki Concat 比 Push 慢 945 倍,只是因为它必须创建一个新数组。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           22103 次  |  
        
|   最近记录:  |