javascript - 使用循环过滤复杂对象的数组

标签 javascript arrays loops

我有两个复杂的 nexted 对象数组,我正在使用循环和 if 语句中寻找符合条件的值,如下所示。当我找到符合条件的对象时,我需要在循环的下一次循环中过滤掉该对象。正如您在此处看到的那样,我正在尝试使用数组来执行此操作,但它不起作用,因为数组在循环的每次迭代期间都重新开始。以下版本是我的代码的简化版本。

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

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

当它们成为 emptyArray 的一部分时,我想从 array2 中过滤掉每个值,这样它们就不会在外循环的第 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;
          }
     }
}

最佳答案

您的代码有一些问题,但您认为 push 不起作用的原因是因为您在循环内覆盖了 array2。

推送永远不会被调用,因为当您执行 var array2 = _.without(array2, emptyArray);

时,您的 for 循环看到一个空 array2

基本上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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>

array2 [6, 8, 10]
emptyArray [2, 4]

关于javascript - 使用循环过滤复杂对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294790/

相关文章:

javascript - 如何选择然后取消选择区域?

javascript - Angularjs - 部分可以有自己的 Controller 、指令等

arrays - 在 Swift 中将坐标字符串转换为 CLLocations 数组

java - 有没有办法在 for 循环中链接列表(或 map )?

javascript - 默认情况下在代码镜像中启动全屏

javascript - 如何在 Node js中使用oracle高级队列(OAQ)

Javascript根据数组本身找到二维数组中的最高值

perl - 对于 Seq 对象数组,是否存在相当于 IO::ScalarArray 的 Bioperl?

java - 循环和字符串生成器

sql - 获取当前正在执行的 SQL Cursor 语句