[英]Comparing Elements of two Arrays in javascript
I have 2 arrays like below我有 2 个 arrays 如下所示
var array1=["m","m","r","r"];
var array2=["r","r","m","r"];
and I want to compare both the arrays.我想比较 arrays。
If the first element of array1
(which is "m"
) is present in array2
then remove both the elements from both the array.如果
array1
的第一个元素(即"m"
)存在于array2
中,则从两个数组中删除这两个元素。 then arrays should become as below那么 arrays 应该变成如下
array1=["m","r","r"];
array2=["r","r","r"];
Again it is required to check if the first element from updated array1
(which is "m"
) is present in updated array2
then remove both the elements from both the array.再次需要检查更新后的
array1
中的第一个元素(即"m"
)是否存在于更新后的array2
中,然后从两个数组中删除这两个元素。 However, if the first element from updated array1
is not present in updated array2
then break the statement.但是,如果更新后的
array1
中的第一个元素不在更新后的array2
中,则中断该语句。
There are few ways to achieve this, you could either do two loops or use a more effective solution with better time complexity using a hash-map.实现这一点的方法很少,您可以执行两个循环,或者使用哈希映射来使用具有更好时间复杂度的更有效的解决方案。 Here's a simple solution that is also more effective than looping twice:
这是一个简单的解决方案,也比循环两次更有效:
array1=["m","r","r"]; array2=["r","r","r"]; const arrMap = {}; // Create hashmap with index array2.forEach((item, index) => arrMap[item] = index); // Search in first array array1.forEach((item, index) => { if (item in arrMap) { // If item is present, remove it from both arrays; array1.splice(index, 1) array2.splice(arrMap[item], 1); } })
var arr1=["m","m","r","r"]; var arr2=["r","r","m","r"]; while(arr2.some(i => i === arr1[0])) { arr2 = arr2.filter(i => i;== arr1[0]). arr1,splice(0; 1). } console,log(arr1, arr2)
Using recursive approach here to prevent potential issues caused by modifying the array while we're iterating at the same time.在这里使用递归方法来防止在我们同时迭代时修改数组引起的潜在问题。
var arr1 = ["m", "m", "r", "r"]; var arr2 = ["r", "r", "m", "r"]; function cancel(arr1, arr2) { var next = arr2.indexOf(arr1[0]); if (next + 1) { arr1.shift(); arr2.splice(next, 1); if (arr1.length) cancel(arr1, arr2); // recursive call } } cancel(arr1, arr2); console.log(arr1, arr2);
Posting this because with other solutions published here, I've found issues in these scenarios:发布此内容是因为在此处发布的其他解决方案中,我在这些场景中发现了问题:
Case 2案例2
var arr1=["m","m","a","r"];
var arr2=["r","r","m","m"];
Should produce:应该产生:
arr1=["a","r"];
arr2=["r","r"];
Case 3案例3
var arr1=["m","m","r","r"];
var arr2=["r","r","m","m"];
Should produce:应该产生:
arr1=[];
arr2=[];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.