首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有循环的复杂对象数组的过滤

具有循环的复杂对象数组的过滤
EN

Stack Overflow用户
提问于 2015-03-27 06:43:08
回答 2查看 418关注 0票数 1

我有两个复杂的下一个对象数组,我在使用循环和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,以便作为循环进程进行过滤。请记住,这是数组的简化版本,基于下划线的解决方案对我来说实现起来非常复杂,或者您可以成功地提出更详细的建议。

我的代码:

代码语言:javascript
运行
复制
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;
          }
     }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-27 07:15:13

您的代码有一些错误,但是您认为push不起作用的原因是因为您正在循环中重写array2。

不调用push,因为在执行array2时,for循环会看到空的var array2 = _.without(array2, emptyArray);

基本上,var array2 = _.without(array2 /* this is empty, you just overrode it in this scope */, emptyArray);总是会导致一个空数组,您的for循环将退出,因为长度从一开始就是array2.ength === 0。

另外,您希望使用_.difference而不是_.without

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>

代码语言:javascript
运行
复制
array2 [6, 8, 10]
emptyArray [2, 4]
票数 2
EN

Stack Overflow用户

发布于 2015-03-27 07:54:55

代码语言:javascript
运行
复制
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;
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29294790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档