javascript - 比较数组并在值不同时更改
问题描述
我在 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
:
前:
arr1 = []; arr2=[2,1,8,9]
// 什么都没发生arr1 = [1]; arr2=[2,8,9]
// arr2 中的 1 被删除arr1 = [1,8,9,7]; arr2=[1,2,7]
// arr2中的1,8,9被删除,7被添加
解决方案
让我解释一下逻辑.. 对于 中的每个元素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)
推荐阅读
- python - 运行几分钟后,Raspberry pi 代码超时
- c# - Autodesk Forge:下载清单附件
- entity-framework - 无法更新 - 实体框架
- javascript - 如何使用 Google Calendar API 检查重复事件的冲突?
- java - 从 URL 读取 XML 文件
- c# - 在 asp.net core api 中为复杂类型保持相同的休息端点
- android - 无法解决:com.afollestad:bridge:5.1.2
- sql-server - 如何使用 Flutter 连接 SQL Server?
- elixir - 带有 Absinthe 后端的其他正确 GraphQL 查询中的未知参数
- c++ - 编译器如何操作同一行中的两个递归函数?