首页 > 解决方案 > 查找和删除数组中的匹配值和对应值

问题描述

这是我在 JavaScript 中遇到的问题的示例:

第一个数组 [1, 2, 3, 4, 5, 6, 7]

第二个数组 [7, 8, 9, 4, 2, 5, 7]

在这种情况下,我需要能够从两个数组中找到并消除“4”和“7”,同时消除两者。这是基于它们的位置和匹配值。

除了消除匹配值之外,我找不到任何东西。但是,在这种情况下,这些值必须位于相同的位置并且必须匹配。

到目前为止,我已经尝试过:

function findCommonElements3(array1, array2) { 
  return arr1.some(item => arr2.includes(item)) 
} 

看起来它只寻找匹配的元素,而我需要找到匹配的对应元素然后删除它们。

标签: javascriptarrays

解决方案


正如评论中提到的,您可以使用splice方法在 JavaScript 中删除一个或多个数组元素。首先,我将存储我应该删除循环数组的元素的索引,如下所示:

const array1 = [1, 2, 3, 4, 5, 6, 7];
const array2 = [7, 8, 9, 4, 2, 5, 7];

//Indexes of same elements
var sameIndexes = [];

function findSameIndexes(element, index) {
  if (array1[index] == array2[index]) {
    sameIndexes.push(index);
  }
}

array1.forEach(findSameIndexes);

调用 console.log(sameIndexes) 应该给出这个结果:

Array [3, 6]

问题是,如果您再次循环数组并按该顺序删除元素,则索引将不再对应于元素。

例如,如果您删除第 3 个元素,数字 7 将不再位于索引 6,为了解决此问题,我将使用reverse方法,这样您就不会丢失索引

// A simple function to remove the elements in both arrays
function removeElements(index) {
  array1.splice(index,1);
  array2.splice(index,1);
}

sameIndexes.reverse().forEach(removeElements);

最终结果将是

Array [1, 2, 3, 5, 6]
Array [7, 8, 9, 2, 5]

希望这是您正在寻找的内容,当然还有更好的方法来写下来,但这也许会帮助您找到解决方案。


推荐阅读