簡體   English   中英

如何實現動態 for 循環?

[英]How can I achieve dynamic for-loop?

我必須列出多個數組的所有總和

例如,我有一個動態長度的二維數組,初始長度為 2,但長度會動態變化。

每個元素長度必須為 3。

function addSum(){
    let length =3;
    //calculate all sum of two array
    let arrayGroup = [[1,2,3],[1,2,3]]

    for(let i=0; i< length ;i++){
       for(let j=0; j< length ;j++){
           let sum = arrayGroup[0][i] +  arrayGroup[1][j]
           console.log(sum)
       }
    }
}


//result in console should look like:
//2 
//3
//4
//3
//4
//5
......and so on

Additional Info:
arrayGroup = [[1,2,3],[1,2,3]]
1 st sum= 1+1 
2 nd sum= 1+2
3 rd sum= 1+3
4 th sum= 2+1
5 th sum= 2+2
6 th sum= 2+3
7 th sum= 3+1
8 th sum= 3+2
9 th sum= 3+3
This is all the sum of a 2-element array

if arrayGroup is 3 element array [[1,2,3],[1,2,3],[1,2,3]]
1 st sum= 1+1+1 // arrayGroup[0][0] + arrayGroup[1][0] + arrayGroup[2][0]
2 nd sum= 1+1+2
3 rd sum= 1+1+3
4 th sum= 1+2+1
5 th sum= 1+3+1
6 th sum= 2+1+1
7 th sum= 3+1+1
....and so on, until list all the combination 

上面的代碼是為了顯示我如何獲得兩個元素的結果,但是當arrayGroup中的數字元素變為N時,我如何獲得N個元素的所有結果(即arrayGroup = [[1,2,3],[1,2 ,3],.......,[1,2,3]])?

你要計算的是 arrays 的cartesian product ,你可以閱讀這個術語(或者你會在數學中找到cartesian product of sets

 function cartesian(arr1, arr2) { const ans = []; for(let x of arr1) { for (let y of arr2) { ans.push(x + y); } } return ans; } let arr = [[1,2,3], [1,2,3], [1,2,3]]; let ans = [0]; for (let x of arr) ans = cartesian(ans,x); console.log(ans)

此外,我們可以使用一些高階函數來簡化代碼並使其更短,但在進行語法改進之前嘗試理解邏輯。

簡而言之,笛卡爾乘積就像兩個集合相乘,這段代碼所做的是通過一次將一個列表與現有結果相乘來計算 N 個列表的乘積。

例如,如果您要計算 1,6,5 的乘積,您可以這樣做

ans = 1

for (let x in [1,6,5] ) ans = ans * x

另請注意,如果元素始終為 [1,2,3],則可以有更快的方法來計算最終結果,因為當您沒有計算隨機元素的笛卡爾積時,就會有一個 output 的模式。

如果我正確理解您的問題,這就是解決方案。

 function addSum(){ //calculate all sum of two array let arrayGroup = [[1,2,3],[1,2,3],[1,2,3]] let length = arrayGroup.length for(let i=0; i< length;i++){ let arr1 = arrayGroup[i] let position = i+1; if(position < length){ let arr2 = arrayGroup[position] arr2.forEach(a=>{ arr1.forEach(n=>{ console.log(a+n) }) }) } } } addSum()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM