繁体   English   中英

使用 javascript 中的 reduce 方法从数组中删除冗余方向

[英]Remove redundant directions from array using reduce method in javascript

我有一个问题,我应该从数组中删除多余的方向。 例如,如果我有 ["N", "S", "E", "W", "E"],我将返回 ["E"],因为南北抵消,东和西抵消离开一个东。 如果它们是相邻的,它们就会抵消。 如果我有 ['W', 'N', 'S', 'E', 'N'],它返回 ["N"] 因为 N,S 取消,留下 W, E 也取消。 我创建了一个有效的 function:

function mapQuest(arr) {
  const directions = { N: 2, S: -2, W: 1, E: -1 };

  for (let i = 0; i < arr.length; i++) {
    while (directions[arr[i]] + directions[arr[i + 1]] == 0) {
      arr.splice(i, 2);
      i = 0;
    }
  }
  return arr;
}

但问题是要求使用 javascript 中的 reduce 方法来解决问题。 我开始写一个:

function mapQuest(arr) {
  let result = arr.reduce((acc, dir) => acc[dir]++, { N: 0, S: 0, W: 0, E: 0 });
}

但是我不知道 go 从这里到哪里以及如何在没有 for 循环遍历 i 的情况下仅取消相邻方向。 如果有人可以帮忙,那就太好了。 谢谢!

您可以检查数组中是否存在相反的左侧。 如果有,只需splice即可。 如果不是,则将当前方向推入数组:

 function mapQuest(arr) { const opposites = { N: 'S', S: 'N', W: 'E', E: 'W' }; return arr.reduce((acc, dir) => { const oppositeIndex = acc.indexOf(opposites[dir]); if (oppositeIndex > -1) { acc.splice(oppositeIndex, 1); } else { acc.push(dir); } return acc; }, []); } console.log(mapQuest(["N", "S", "E", "W", "E"])); // ["E"] console.log(mapQuest(['W', 'N', 'S', 'E', 'N'])); // ["N"]

尝试这个:

let arr = ['W', 'N', 'S', 'E', 'N'];
    
    let result = arr.reduce((acc, cur) => {
        if(acc.toCancel.length === 0){
            acc.toCancel.push(cur);
            acc.result = cur;
            return acc;
        }else{
            let pair = `${acc.toCancel[0]}${cur}`;
            if(acc.pairs.includes(pair)){
                acc.toCancel = [];
                acc.result = cur === acc.result? "":acc.result;         
            }
            return acc;
        }
    },{toCancel:[], result:"", pairs:["EW", "NS", "WE", "SN"]});
    
    console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM