2016-06-12 6 views
2
var arrayOfArrays = [ 
    [1,2,3,4,5], /* row a */ 
    [1,2,3,4,5], /* row b */ 
    [1,2,3,4,5], /* row c */ 
    [1,2,3,4,5], /* row d */ 
    [1,2,3,4,5] /* row e */ 
]; 

for (var i = 0; i < arrayOfArrays.length; i++) { 
    var outterArr = arrayOfArrays[i]; 
    for (var x = 0; x < outterArr.length; x++) { 
    var innerArr = arrayOfArrays[x]; 
    console.log(innerArr[x]); 
    console.log('******************'); 
    } 
} 

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

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

  • Row многосвязной на 10
  • строке A умножить на 20
  • Row A умножить на 30
  • Row многосвязной на 40
  • строке A умножить на 50

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

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

UPDATE:

Спасибо за комментарии всех! Вы все потрясающие!

Похоже, что большинство комментариев воспользовались тем, что мультипликаторы случаются быть кратны 10.

Как бы ответы измениться, если мультипликаторы были уникальны:

  • строка А умножить на 21
  • строка А умножить на 45
  • строке A умножить на 56
  • строке A умножить на 67
  • строка А умножить на 87
+0

сделать вам нужно просто умножить или сохранить результат? –

+0

умножать и регистрировать результаты, расположенные на расстоянии *********** - подобно тому, как я зарегистрировал значения внутреннего массива – user6456392

+0

Вы имели в виду, что все строки А в вашем примере того, что умножить от? – Gabs00

ответ

1

Вы можете запустить Foreach на массиве и умножают на основе индекса:

var arrayOfArrays = [ 
 
    [1,2,3,4,5], /* row a */ 
 
    [1,2,3,4,5], /* row b */ 
 
    [1,2,3,4,5], /* row c */ 
 
    [1,2,3,4,5], /* row d */ 
 
    [1,2,3,4,5] /* row e */ 
 
]; 
 

 
arrayOfArrays.forEach((a, i) => { 
 
    let mult = ((i + 1) * 10) 
 
    a.forEach((num) => { 
 
    num = num * mult 
 
    console.log(num) 
 
    console.log('******************'); 
 
    }) 
 
})

+0

Что делать, если бы я проигнорировал, что множители просто кратно 10; скажем, мультипликаторы: 21,45,56,67,87; – user6456392

+0

Поскольку у вас уже есть три ответа на этот вопрос, у вас может быть больше удачи и больше в рамках рекомендаций сообщества, опубликовав это как новый вопрос. –

+0

Спасибо, я сделаю. – user6456392

1

Возьмите значения из outterArr[x], потому что outterArr это строка.

var arrayOfArrays = [ 
 
    [1,2,3,4,5], /* row a */ 
 
    [1,2,3,4,5], /* row b */ 
 
    [1,2,3,4,5], /* row c */ 
 
    [1,2,3,4,5], /* row d */ 
 
    [1,2,3,4,5] /* row e */ 
 
]; 
 

 
for (var i = 0; i < arrayOfArrays.length; i++) { 
 
    var outterArr = arrayOfArrays[i]; 
 
    for (var x = 0; x < outterArr.length; x++) { 
 
     var innerVal = outterArr[x];   // change this to outterArr[x] 
 
     //    ^^^^^^^^^^^^ 
 
     console.log(innerVal * (i + 1) * 10); // multiply value 
 
     console.log('******************'); 
 
    } 
 
}

+0

Это потрясающе! – user6456392

0

Я думаю, что это самый короткий возможный ответ:

var arrayOfArrays = [ 
 
    [1,2,3,4,5], /* row a */ 
 
    [1,2,3,4,5], /* row b */ 
 
    [1,2,3,4,5], /* row c */ 
 
    [1,2,3,4,5], /* row d */ 
 
    [1,2,3,4,5] /* row e */ 
 
]; 
 

 
var newArr = arrayOfArrays.map((v,i) => v.map(x=> x *= (i+1) * 10)); 
 

 
console.log(newArr);

Тело функции стрелки нужно только быть заключен {..}, если есть более чем одно выражение, или если тело состоит из выражения без выражения. Если есть только одно выражение, и вы опускаете окружающие {..}, перед выражением подразумевается возврат, как показано в предыдущем фрагменте.

+2

Может быть самым коротким, но с точки зрения новичков это, скорее всего, совершенно запутанно. – charlietfl

+0

Это правда, но я люблю ES6. Я просто не мог устоять. – Przemek