繁体   English   中英

另一个for循环JavaScript中的for循环问题

[英]problems with for loop inside another for loop Javascript

我在经历这两个for循环时遇到问题,我需要从循环内的第一个数组中获取相同的元素,但是值被重复了。 我知道根据第二个数组的数据重复它们。

我试图进行比较,但无法获得想要的结果。

 var array = [ { grouper: 1 }, { grouper: 2 }, { grouper: 3 }, { grouper: 4 }, ]; var array2 = [ { value: 1, grouper: 1, status: 100 }, { value: 2, grouper: 2, status: 100 }, { value: 3, grouper: 3, status: 100 } ]; for(var i = 0; i<array.length; i++){ for(var j = 0; j<array2.length; j++){ if(array2[j].grouper == array[i].grouper){ console.log(array[i].grouper+'-'+array2[j].value); } } } 

这是我想要的结果,我需要来自第一个数组的所有分组程序和来自第二个数组的值:

1-1
2-2
3-3
4-

石斑鱼4没有价值,但我需要证明这一点。

我需要第二个数组,因为我要与第二个数组中的数据进行比较

我不知道我做错了程序。 我希望你能帮助我。

首先,通过您提供的示例,我相信您想回来:

1,2,3

array2内没有第4个对象,因此您的条件(array2[j].grouper == array[i].grouper将永远不会为true。

这里的问题是,是否始终在比较相同的索引? 在此示例中,您正在将array [0]与array2 [0]进行比较,以查看array中的分组者是否等于array2中的分组者……就是这样吗?

在这种情况下,您只需执行一个循环:

for (var i = 0; i < array.length; i++) {
      if (array[i].grouper == array2[i].grouper) {
        console.log(array[i].grouper+'-'+array2[j].value);
      }
}

您可以简单地跟踪是否存在匹配项(变量shown ),如果没有匹配项,则显示“一半”行:

 var array = [{grouper: 1},{grouper: 2},{grouper: 3},{grouper: 4},]; var array2 = [ {value: 1, grouper: 1, status: 100}, {value: 2, grouper: 2, status: 100}, {value: 3, grouper: 3, status: 100} ]; for(var i = 0; i<array.length; i++){ var shown=false; for(var j = 0; j<array2.length; j++){ if(array2[j].grouper == array[i].grouper){ console.log(array[i].grouper+'-'+array2[j].value); shown=true; } } if(!shown){ console.log(array[i].grouper+"-"); } } 

@FabianSierra ...与您提供的示例一样,只需要处理最内层循环中未满足的if子句/条件即可。

另外,更通用的方法可能会考虑更改字段名称(键)。 因此,基于函数和Array.reduce / Array.find的方法可提供更好的代码重用。 然后,示例实现可能类似于该实现...

 var array = [{ // in order. grouper: 1 }, { grouper: 2 }, { grouper: 3 }, { grouper: 4 }]; var array2 = [{ // not in the order similar to `array`. value: 22, grouper: 2, status: 200 }, { value: 33, grouper: 3, status: 300 }, { value: 11, grouper: 1, status: 100 }]; function collectRelatedItemValuesByKeys(collector, item) { var sourceKey = collector.sourceKey; var targetKey = collector.targetKey; var targetList = collector.targetList; var resultList = collector.result; var sourceValue = item[sourceKey]; var targetValue; var relatedItem = targetList.find(function (targetItem) { return (targetItem[sourceKey] === sourceValue); }); if (typeof relatedItem !== 'undefined') { targetValue = relatedItem[targetKey]; } else if (typeof targetValue === 'undefined') { targetValue = ''; // `relatedItem` does not exist. } resultList.push([sourceValue, targetValue].join('-')); return collector; } var resultList = array.reduce(collectRelatedItemValuesByKeys, { sourceKey: 'grouper', targetKey: 'value', targetList: array2, result: [] }).result; console.log('resultList : ', resultList); resultList = array.reduce(collectRelatedItemValuesByKeys, { sourceKey: 'grouper', targetKey: 'status', targetList: array2, result: [] }).result; console.log('resultList : ', resultList); 
 .as-console-wrapper { max-height: 100%!important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM