Как я могу добиться динамического цикла for?

Я должен перечислить всю сумму нескольких массивов

Например, у меня есть 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]])?

Используйте arrayGroup.length вместо фиксированного length.

Jan Pfeifer 09.01.2023 13:08

что значит вся сумма? какой будет вывод для [[1,2,3], [4,5,6],[7,8,9]]?

ashish singh 09.01.2023 13:08

Действительно, здесь нужно немного больше ясности. Как и предложил Ашиш Сингх.

Jan Pfeifer 09.01.2023 13:49

@ashishsingh Спасибо за ответ, я добавил больше информации в вопрос

LebTim 09.01.2023 17:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это решение, если я правильно понял ваш вопрос.

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]] или любая длина группы массивов?

LebTim 09.01.2023 18:02

Здесь я отредактировал свой ответ.

cucumber 10.01.2023 11:22

Он по-прежнему суммирует только 2 массива, максимальное число должно достигать 9 в этом примере.

vanowm 11.01.2023 13:50
Ответ принят как подходящий

то, что вы пытаетесь вычислить, называется 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 09.01.2023 20:18

попробуйте запустить его для вашего ввода и скажите мне, дает ли он результат, отличный от ваших ожиданий

ashish singh 09.01.2023 20:21

@LebTim в этом ответе нет кода типа «длина = 3», поэтому он не ограничен определенным размером аргумента. Что произошло, когда вы попытались изменить arr =?

freedomn-m 10.01.2023 11:17

@freedomn-m он просто будет использовать предоставленные числа в расчетах. При таком подходе не имеет значения, сколько чисел содержится в наборе или сколько существует наборов, не имеет значения даже, если наборы имеют разные размеры.

vanowm 11.01.2023 16:07

@вановм ? да, это то, что я сказал - вы хотели направить это ОП? (ЛебТим)

freedomn-m 11.01.2023 17:12

Другие вопросы по теме