首页 > 解决方案 > 比较数组并在值不同时更改

问题描述

我在 JavaScript 中有下一个情况:

const arr1 = [1,2,3];  // by default it is empty `[]`
const arr2 = [2,1,8,9];

arr1可以动态改变。所以有时它可能是[1,2,3,4][4,2,3]等等。

接下来是思路:

取决于arr1改变之arr2类的,
如果 inarr1是一个与来自的数字相等的数字arr2
那么arr2应该删除那个相等的数字,
但是如果添加的新数字arr1不存在,arr2那么应该添加它在arr2
前:

  1. arr1 = []; arr2=[2,1,8,9]// 什么都没发生
  2. arr1 = [1]; arr2=[2,8,9] // arr2 中的 1 被删除
  3. arr1 = [1,8,9,7]; arr2=[1,2,7] // arr2中的1,8,9被删除,7被添加

标签: javascript

解决方案


让我解释一下逻辑.. 对于 中的每个元素arr1,如果arr2有元素(arr2.indexOf(a)!=-1),运行一个 while 循环,当所有arr2与特定元素匹配的元素arr1被删除 时,该循环将停止
最后,else如果 arr2包含特定元素,则逻辑将激活

const arr1 = [1,2,3];  // by default it is empty `[]`
const arr2 = [2,1,8,9];

function updateArr(arr1,arr2){
  arr1.forEach(a=>{
    let index=arr2.indexOf(a)
    if(index!=-1){
      while(index!=-1){arr2.splice(index,1);index=arr2.indexOf(a)}
    }
    else{arr2.push(a)}
  })
  return arr2
}

//function that takes in 2 vars, uses the first to edit the second

console.log(updateArr([2,3,7,9], [2,1,8,9]))
console.log(updateArr(arr1,arr2))
console.log("No cap it works\n",arr2)


推荐阅读