使用条件for循环更新数组-Javascript

Updating an array with a conditional for loop - Javascript

本文关键字:更新 数组 -Javascript 循环 for 条件      更新时间:2023-09-26

我有两个数组,它们具有不同类型的复杂对象。如果每个数组的对象之间有一定的值匹配,那么我需要从其中一个匹配对象中提取一些值并保存它。如果保存了匹配对象中的几个键值对,那么就需要将其从数组中删除,这样它就不会保存多次。

以下是我最大的努力(到目前为止,我展示了一个我正在努力做的事情的例子)。

我想根据下面的代码更新我的空数组。这是一个简单的例子来说明一个更复杂的问题,我认为这可能是比剪切和粘贴几十行代码更好的方法。这个问题与在每次传递外循环期间收集emptyArray中的值和过滤array2有关。以下划线开头的建议没有帮助。

var array = [1, 2, 3, 4, 1, 2, 3, 4];
var array2 = [2, 4, 6, 8, 10];
var emptyArray = [];
for (i = 0; i < array.length; i++){
     var something = array[i];
     var array2 = _.without(array2, emptyArray);
     for (a = 0; a < array2.length; a++){
         var value = array2[a];
          if(something === value){
              emptyArray.push(value);
              break;
          }
     }
}

我想根据if语句更新array2中的值,这样这些值就不会在嵌套循环中重复。相反,我的emptyArray保持为空,而不是添加来自array2的值,因为array2的元素等于数组的元素。

需要明确的是,现在emptyArray保持为空,并且从不过滤array2。我希望在外循环的第二次迭代开始时看到空数组收集值2,然后在外循环第四次迭代开始处看到emptyArray收集值4。

我想从array2中过滤这些值中的每一个,因为它们成为emptyArray的一部分,这样它们就不会在外循环的第6次和第8次迭代中触发if语句。我想象当循环结束时,emptyArray=[2,4],array2=[6,8,10]。

函数_.without不接受数组作为第二个参数,它接受要删除的单个项。例如_.without(ar1,1,2,3)如果需要传递数组,请使用_.difference(ar1, ar2)

由于您已经在使用下划线,所以这可以简单得多。

emptyArray = _.intersection(array, array2)
array2 = _.difference(array2, emptyArray)