Javascript 如何在这个算法中使用reduce?

Javascript 如何在这个算法中使用reduce?,javascript,algorithm,Javascript,Algorithm,我不知道为什么在代码中写入“else”字时会出现上述错误 及 我想在评论中看到结果。解决这个问题有什么好处?您需要分配reduce操作的结果,如果块中的累加器也用于下一次迭代,还需要返回块中的累加器: /* 我想知道这个结果 计数=4/[1,1,3,3] 数组=[4,2,4] */ 让计数=0; 让数组=[4,3,1,1,3,2,4] 数组=数组。减少((acc,cur)=>{ if(附件[附件长度-1]==当前){ 附件pop() 计数+=2; 返回acc; }否则{ 返回acc.conca

我不知道为什么在代码中写入“else”字时会出现上述错误 及


我想在评论中看到结果。解决这个问题有什么好处?

您需要分配
reduce
操作的结果,如果
块中的累加器也用于下一次迭代,还需要返回
块中的累加器:

/*
我想知道这个结果
计数=4/[1,1,3,3]
数组=[4,2,4]
*/
让计数=0;
让数组=[4,3,1,1,3,2,4]
数组=数组。减少((acc,cur)=>{
if(附件[附件长度-1]==当前){
附件pop()
计数+=2;
返回acc;
}否则{
返回acc.concat(当前);
} 
}, []);

log({count,array})
您需要分配
reduce
操作的结果,并在
if
块中返回累加器,以便下一次迭代:

/*
我想知道这个结果
计数=4/[1,1,3,3]
数组=[4,2,4]
*/
让计数=0;
让数组=[4,3,1,1,3,2,4]
数组=数组。减少((acc,cur)=>{
if(附件[附件长度-1]==当前){
附件pop()
计数+=2;
返回acc;
}否则{
返回acc.concat(当前);
} 
}, []);

log({count,array})您忘记返回acc

let count=0;
让数组=[4,3,1,1,3,2,4]
让结果=数组。减少((acc,cur)=>{
if(附件[附件长度-1]==当前){
附件pop()
计数+=2
返回acc;
} 
其他返回依据concat(当前)
}, [])
控制台日志(计数);

console.log(结果)
您忘记返回acc

let count=0;
让数组=[4,3,1,1,3,2,4]
让结果=数组。减少((acc,cur)=>{
if(附件[附件长度-1]==当前){
附件pop()
计数+=2
返回acc;
} 
其他返回依据concat(当前)
}, [])
控制台日志(计数);

console.log(result)
通过只查看值和单个值的收集,您可以选择稍微不同的方法

最后的
计数
从两个数组的长度中导出

const
数组=[4,3,1,1,3,2,4],
结果=数组。减少((acc,cur)=>{
如果(acc[acc.length-1]==cur)acc.pop();
其他附件推送(当前);
返回acc;
}, []),
count=array.length-result.length;
控制台日志(计数);

控制台日志(结果)通过只查看值和单个值的收集,您可以选择稍微不同的方式

最后的
计数
从两个数组的长度中导出

const
数组=[4,3,1,1,3,2,4],
结果=数组。减少((acc,cur)=>{
如果(acc[acc.length-1]==cur)acc.pop();
其他附件推送(当前);
返回acc;
}, []),
count=array.length-result.length;
控制台日志(计数);


控制台日志(结果)天哪。。。我已经做了5个小时了。非常感谢你!不客气,但是。。。当同一个数字连续出现两倍以上时会发生什么?嗯。老实说,我从来没想过会这样。我刚刚解决了迭代(两次),所以我现在必须考虑一下…@kirk0201这个答案似乎解决了你的问题。你可以考虑接受它作为正确答案。我已经做了5个小时了。非常感谢你!不客气,但是。。。当同一个数字连续出现两倍以上时会发生什么?嗯。老实说,我从来没想过会这样。我刚刚解决了迭代(两次),所以我现在必须考虑一下…@kirk0201这个答案似乎解决了你的问题。你可以考虑接受它作为正确的答案。我只是通过创建一个条件来练习还原函数。但是我没有得到所需的值,所以我问了一个问题,[4,3,4,1,1,1,3]的返回值应该是什么?看看它是如何工作的,尤其是
累加器。如果您没有从回调返回值(输入If分支时就是这种情况),那么下一次迭代您的
累加器将是
未定义的
。我不知道reduce最重要的部分。谢谢你,我会仔细阅读的!!隐马尔可夫模型。。。好吧,我想我的问题并不有趣。无论如何,你已经接受了答案。我只是通过创建一个条件来练习reduce函数。但是我没有得到所需的值,所以我问了一个问题,[4,3,4,1,1,1,3]的返回值应该是什么?看看它是如何工作的,尤其是
累加器。如果您没有从回调返回值(输入If分支时就是这种情况),那么下一次迭代您的
累加器将是
未定义的
。我不知道reduce最重要的部分。谢谢你,我会仔细阅读的!!隐马尔可夫模型。。。好吧,我想我的问题并不有趣。不管怎样,你已经接受了答案。这是一种意想不到的方式。我会参考这个!!这是一种意想不到的方式。我会参考这个!!
    /*
     When consecutive values come into the array, 
     delete and count the number

      I want to this result
      count = 4 // [1, 1, 3, 3]
      array = [4, 2, 4]
    */
    
    let count = 0;
    let array = [4, 3, 1, 1, 3, 2, 4]
 
    array.reduce((acc, cur) => {
      if (acc[acc.length - 1] === cur) {
        acc.pop()
        count += 2
      } 
        // this part
        else return acc.concat(cur)
    }, [])