[英]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.