NodeJS Javascript -单行reduce语句因push语句而无法工作

y53ybaqx  于 2023-03-29  发布在  Node.js
关注(0)|答案(1)|浏览(108)

//数组中只有数字,直到n次

function deleteNth(arr,n){
    // ...
    function count(arr1, num){
        console.log('arr1', arr1)
        return arr1.reduce((acc, val) => (val === num) ? ++acc : acc, 0);
    }
    // return arr.reduce((acc1, val1) => {
    //     if (count(acc1, val1) < n){
    //         acc1.push(val1);
    //     }
    //     else{
    //         acc1;
    //     }
    //     return acc1;
    // }, []);
    return arr.reduce((acc1, val1) => ((count(acc1, val1) < n) ? acc1.push(val1) : acc1), []);
  }

  
console.log(deleteNth([20,37,20,21], 1));    // [20,37,21]`

当我运行这段代码时,我得到了错误。TypeError:arr1.reduce不是函数
然而,当我使用注解代码运行时,它运行得很好。在reduce函数中使用多行代码,它运行得很好。
在单行代码中,当处理第一个数组元素时,变量acc 1的值为1。2由于这个原因,我出错了。3有人能告诉我我犯了什么错误吗?
console.log(deleteNth([20,37,20,21],1));// [20,37,21]

rryofs0p

rryofs0p1#

它不起作用,因为你应该在reduce回调中返回数组,但三进制的一个分支返回push的结果,这是数组的新长度。
只有当条件为真时,才可以对push使用逻辑and运算符,并使用逗号运算符始终在末尾返回累加器数组。

function deleteNth(arr, n) {
  function count(arr1, num) {
    return arr1.reduce((acc, val) => (val === num) ? ++acc : acc, 0);
  }
  return arr.reduce((acc1, val1) => (count(acc1, val1) < n && acc1.push(val1), acc1), []);
}
console.log(deleteNth([20, 37, 20, 21], 1)); // [20,37,21]

相关问题