我有两个具有不同类型复杂对象的数组。如果每个数组的对象之间存在某种值匹配,那么我需要从其中一个匹配对象中获取一些值并保存它。如果匹配对象中的一些键值对被保存,则需要从其数组中删除它,以便不会多次保存。
以下是我的最大努力(到目前为止,为了展示我尝试做的事情的一个例子)。
我想根据后面的代码更新我的空数组。这是一个简单的例子来说明一个更复杂的问题,我认为它可能是一个比剪切和粘贴几十行代码更好的方法。问题与在每次传递外循环期间收集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然后我想在外循环的第4次迭代开始时看到emptyArray收集值4 。
我想从array2中过滤掉这些值中的每一个,因为它们成为emptyArray的一部分,这样它们就不会在外部循环的第6和第8次迭代中引发if语句。我想,当循环结束时,emptyArray = [2,4]和array2 = [6,8,10]。
答案 0 :(得分:2)
函数_.without
没有将数组作为第二个参数,它需要删除单个项目。例如_.without(ar1,1,2,3)
如果您需要传递数组,请使用_.difference(ar1, ar2)
答案 1 :(得分:0)
由于您已经使用了下划线,因此可以更加简单。
emptyArray = _.intersection(array, array2)
array2 = _.difference(array2, emptyArray)