我有两个复杂的nexted对象数组,我正在寻找使用循环和if语句的限定值,如下所示。当我找到一个合格的对象时,我需要在下一个循环中过滤掉该对象。我正试图用数组做这个,你可以在这里看到,但是在循环的每次迭代过程中它都没有工作。以下版本是我的代码的简化版本。
我想基于if语句更新array2中的值,以便在嵌套循环中不重复这些值。相反,我的emptyArray保持为空,而不是从array2中添加值,因为array2的元素等于数组的元素。
要清楚,现在emptyArray仍为空,永远不会过滤array2。我想在外循环的第二次迭代开始时看到emptyArray收集值2,然后我希望在外循环的第4次迭代开始时看到emptyArray收集值4。
我想从array2中过滤掉这些值中的每一个,因为它们成为emptyArray的一部分,这样它们就不会在外部循环的第6和第8次迭代中引发if语句。我想,当循环结束时,emptyArray = [2,4]和array2 = [6,8,10]。
底线,我需要emptyArray来收集限定值并将它们传递回var 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;
}
}
}
答案 0 :(得分:2)
您的代码存在一些问题,但您认为推送无法正常工作的原因是因为您在循环内覆盖了array2。
push永远不会被调用,因为你的for循环在你var array2 = _.without(array2, emptyArray);
基本上var array2 = _.without(array2 /* this is empty, you just overrode it in this scope */, emptyArray);
将始终导致一个空数组,并且你的for循环将退出,因为length是array2.length === 0从一开始。
此外,您希望使用_.difference
代替_.without
var array = [1, 2, 3, 4, 1, 2, 3, 4];
var array2 = [2, 4, 6, 8, 10];
var emptyArray = [];
for (var i = 0; i < array.length; i++) {
var something = array[i];
array2 = _.difference(array2, emptyArray);
for (var j = 0; j < array2.length; j++) {
var value = array2[j];
if (something === value) {
emptyArray.push(value);
break;
}
}
}
console.log("array2",array2);
console.log("emptyArray", emptyArray);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>
&#13;
array2 [6, 8, 10]
emptyArray [2, 4]
答案 1 :(得分:0)
var array = [1, 2, 3, 4, 1, 2, 3, 4];
var array2 = [2, 4, 6, 8, 10];
var emptyArray = [];
for (var i = 0; i < array.length; i++) {
var something = array[i];
for (var j = 0; j < array2.length; j++) {
var value = array2[j];
if (something === value) {
array2 = _.without(array2, value);
break;
}
}
}