gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:58:18 25 4
gpt4 key购买 nike

我有两个复杂的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com