Я должен перечислить всю сумму нескольких массивов
Например, у меня есть 2D-массив с динамической длиной, и начальная длина равна 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.info(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]])?
что значит вся сумма? какой будет вывод для [[1,2,3], [4,5,6],[7,8,9]]?
Действительно, здесь нужно немного больше ясности. Как и предложил Ашиш Сингх.
@ashishsingh Спасибо за ответ, я добавил больше информации в вопрос
Это решение, если я правильно понял ваш вопрос.
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.info(a+n)
})
})
}
}
}
addSum()
Этот код обрабатывает только 2 элемента arrayGroup , как насчет n-элементного arrayGroup , что означает, что arrayGroup может быть [ [1,2,3],[1,2,3],[1,2,3] ] или [[1, 2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]] или любая длина группы массивов?
Здесь я отредактировал свой ответ.
Он по-прежнему суммирует только 2 массива, максимальное число должно достигать 9 в этом примере.
то, что вы пытаетесь вычислить, называется 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.info(ans)
Кроме того, мы можем упростить код и сделать его короче, используя некоторые функции более высокого порядка, но постарайтесь понять логику, прежде чем переходить к синтаксическим улучшениям.
Короче говоря, декартово произведение похоже на умножение двух наборов, то, что делает этот код, - это вычисление произведения для N списков путем умножения одного списка на существующий результат за раз.
например, если вы должны были рассчитать произведение 1,6,5, вы можете сделать
ans = 1
for (let x in [1,6,5] ) ans = ans * x
Также обратите внимание, что если элементы всегда будут [1,2,3], могут быть более быстрые методы для вычисления конечного результата, потому что тогда будет шаблон для вывода, поскольку вы не вычисляете декартово произведение случайных элементов.
Спасибо за ваш ответ, он очень полезен, но мой главный вопрос заключается в том, как поступить, если количество аргументов декартовой функции не равно 2. Количество аргументов может быть от 2 до 100 аргументов. Может ли декартова функция справиться с этой ситуацией?
попробуйте запустить его для вашего ввода и скажите мне, дает ли он результат, отличный от ваших ожиданий
@LebTim в этом ответе нет кода типа «длина = 3», поэтому он не ограничен определенным размером аргумента. Что произошло, когда вы попытались изменить arr =
?
@freedomn-m он просто будет использовать предоставленные числа в расчетах. При таком подходе не имеет значения, сколько чисел содержится в наборе или сколько существует наборов, не имеет значения даже, если наборы имеют разные размеры.
@вановм ? да, это то, что я сказал - вы хотели направить это ОП? (ЛебТим)
Используйте
arrayGroup.length
вместо фиксированногоlength
.