Итак, на мой взгляд, есть несколько способов достичь того, что вы ищете,
- Используя
filter
и include
, как некоторые из упомянутых выше меня -
Это будет работать, но я не знаю, насколько эффективно это будет, поскольку вы используете фильтр для итерации по arr2, а затем по каждому элементу, который вы итерируете по arr1, чтобы увидеть, есть ли соответствующий случай, я не знаю, насколько вы знакомы с алгоритмом анализ, но это O (N power 2) , что не очень эффективно по времени, означает, что при быстром росте arr1 или arr2 ваша функция будет работать намного дольше, если вы используете эту опцию, используйте sort()
сначала, чтобы сэкономить время и повысить эффективность.
См. Пример:
let namesToRemove = ["Tom", "Harry", "Patrick"].sort()
let names = ["Miguel", "Harry", "Patrick", "Felipe", "Mario", "Tom"].sort()
let lastNameToRemove = namesToRemove[namesToRemove.length - 1]
names = names.filter((name) => {
if (name[0] > lastNameToRemove[0]) {
return true
}
return !namesToRemove.includes(name)
})
console.log(names)
Имейте в виду, что если вы будете использовать for loop
и splice()
, вы можете просто сломаться, и это будет еще более эффективным.
- Использование
Map
- Вы можете выполнить итерацию один раз для своего первого массива и создать карту в JS, которая просто использует обозначение объекта и один раз для массива имен, и проверить, есть ли совпадение, вы можете улучшить это с помощью sort()
и другие улучшения, но идея в том, см. пример ниже.
См. Пример:
let namesToRemove = ["Tom", "Harry", "Patrick"]
let names = ["Miguel", "Harry", "Patrick", "Felipe", "Mario", "Tom"]
let namesToRemoveMap = {}
for (name of namesToRemove) {
namesToRemoveMap[name] = true
}
names = names.filter((name) => !namesToRemoveMap[name])
console.log(names)
Конечно, в любом случае, я бы включил еще несколько защитных проверок, например, если в массивах есть значение и т. Д.
Надеюсь, я смогу объяснить все ясно, дайте мне знать, если вам нужна дополнительная помощь или если у вас есть какие-либо вопросы.