簡體   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