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

标签 javascript arrays methods reduce

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

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 });
}

但我不知道从这里到哪里去,也不知道如何在没有 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"]

关于javascript - 使用javascript中的reduce方法从数组中删除冗余方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62766030/

相关文章:

javascript - 删除某些内容时删除 span 标签

javascript - 纯 Javascript 中的 jQuery .load template.html

javascript - 如何对 ES6 `Set` 进行排序?

java - 如何控制Activity方法流直到非Activity类执行网络操作

java - java中同一对象内的对象列表

java - 由于某种奇怪的原因,方法被调用两次?

javascript - jQuery 和 CSS :before

javascript - jQuery:如果单击相同的元素,则删除类

PHP/MySQL 基于数组内容的平均值

c# - 元组列表到多维数组