【问题标题】:How can I loop through two arrays simultaneously in JavaScript?如何在 JavaScript 中同时遍历两个数组?
【发布时间】:2021-10-15 09:42:18
【问题描述】:

我目前正在开发一个 JavaScript 个人项目,但遇到了一个主要障碍;我有 2 个数组,一个用于句子的字母,一个包含用于信息的对象。

我需要遍历包含所有字母的第一个数组,然后遍历第二个数组以检查letter 变量是否包含来自我的第二个数组中object 的任何数据。问题是我不知道如何同时运行这些数组,导致这样的输出,原因是数组 1 中的索引数量乘以数组 2 中的数量:

这是我的代码:

clearLookALikes: (string) => {
        const mainArray = string.split('')
        const replaceInfo = [

            {
                abuseLetter: 'È',
                replacementLetter: 'E'
            },
            {
                abuseLetter: 'É',
                replacementLetter: 'E'
            },
            {
                abuseLetter: 'Ë',
                replacementLetter: 'E'
            },
            {
                abuseLetter: 'Ê',
                replacementLetter: 'E'
            },
            {
                abuseLetter: 'Ē',
                replacementLetter: 'E'
            },
            {
                abuseLetter: 'Ē',
                replacementLetter: 'e'
            },
        ]
        const newArray = []


        for (const letter of mainArray) {
            for (const object of replaceInfo) {
                if (letter === object.abuseLetter) {
                    newArray.push(object.replacementLetter)
                } else {
                    newArray.push(letter)
                }
            }
        }
        console.log(newArray)
        const finishedProduct = newArray.join('')
        console.log(finishedProduct)



    }

理想情况下,它会按预期替换字母。谢谢您的帮助!我想知道这是否是正确的做法,如果我应该这样做,请随时给我反馈。

【问题讨论】:

  • replaceInfo 应该是一个对象(或映射),理想情况下,将“滥用”字母映射到替换字母。就代码而言,在您遍历整个 replaceInfo 数组并确定您没有找到匹配的滥用字母之前,您不应该将字母推送到 newArray 上。

标签: javascript arrays loops object nested-loops


【解决方案1】:

我建议将replaceInfo 数组转换为地图或对象。下面的代码就是这样做的。然后,它遍历字符串并检查对象中是否有替换字母。如果是这样,请将其添加到输出字符串中。如果没有,请添加原始字母。

const replaceInfo=[{abuseLetter:"È",replacementLetter:"E"},{abuseLetter:"É",replacementLetter:"E"},{abuseLetter:"Ë",replacementLetter:"E"},{abuseLetter:"Ê",replacementLetter:"E"},{abuseLetter:"Ē",replacementLetter:"E"},{abuseLetter:"Ē",replacementLetter:"e"}];

const replacementMap = replaceInfo.reduce((acc, el) => {
  acc[el.abuseLetter] = el.replacementLetter;
  return acc;
}, {});

function clearLookalikes(str) {
  let final = "";
  for(let i = 0; i < str.length; i++) {
    if (replacementMap[str[i]] !== undefined) {
      final += replacementMap[str[i]];
    } else {
      final += str[i];
    }
  }
  return final;
}

console.log(clearLookalikes("thiÉefĒ"));

【讨论】:

    【解决方案2】:

    我假设您正在尝试用replacementLetters 替换位于字符串中的某些abuseLetters。为此,您甚至可能不想将string 拆分为一个数组,而只是循环遍历replaceInfo

    for (const obj of replaceInfo) {
        string = string.replaceAll(obj.abuseLetter, obj.replacementLetter);
    }
    
    return string;
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2022-08-30
      • 2022-08-30
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多