2016-07-08 4 views
0

Я разбиваю массив на два массива arr1 & arr2. Затем я хочу суммировать значения и привязать их к другому массиву, например arr3. Как я могу это сделать?Разделите массив на куски и суммируйте каждый индекс, затем слейте в другой массив.

var arr1 = [1,2,3,4] 
var arr2 = [2,3,4,4] 

var arr3 = [3,5,7,8] 

это работает отлично со статическими массивами, но моя проблема

var TotalOfArray = []; 
var temparray = []; 

for (i = 0, j = x.length; i < j; i += chunk) { 

     temparray = x.slice(i, i + chunk); 

     if (temparray.length == chunk) { 

      console.log("before loop: "+TotalOfArray.length); 

      if (TotalOfArray.length == 0) { 

       for (i in temparray) { 
        TotalOfArray[i] = temparray[i]; 
       } 

       console.log("after loop: "+TotalOfArray.length); 

      } else { 

       for (i in temparray) { 
        TotalOfArray[i] = TotalOfArray[i] + temparray[i]; 
       } 

      } 

     } 

    } 

как вы можете видеть, х будет основной массив, который я сплайсинга в temparray массив, так что каждый раз, когда он будет сращивать с длиной массива 31 и чем я хочу сделать sum, chunk = 31 на данный момент. но это не входит в ELSE. не могли бы вы мне помочь.

+2

вы гарантированно иметь одинаковое количество элементов в arr1 и arr2? –

+0

Да, каждый раз, когда он будет таким же –

ответ

4

равной длины Массивы:

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

var arr1 = [1, 2, 3, 4]; 
 
var arr2 = [2, 3, 4, 4]; 
 

 
var arr3 = arr1.map(function(a, i) { 
 
    return a + arr2[i]; 
 
}); 
 

 
console.log(arr3);

переменной длины Массивы:

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

var arr1 = [1, 2, 3, 4]; 
 
var arr2 = [2, 3, 4, 4, 5]; 
 

 
var sorted = [arr1, arr2].sort((a, b) => b.length - a.length); 
 

 
var arr3 = sorted[0].map(function(a, i) { 
 
    return a + (sorted[1][i] || 0); 
 
}); 
 

 
console.log(arr3);

1

Применение for петли:

var arr1 = [1,2,3,4] 
 
    var arr2 = [2,3,4,4] 
 
    var arr3 = [] 
 
    for (i in arr1) { arr3[i] = arr1[i] + arr2[i]; } 
 

 
    console.log(arr3)

0
var arr1 = [1,2,3,4] 
var arr2 = [2,3,4,4] 
var arr3 = [] 

for (var i = 0; i < arr1.length; i++) { 
    arr3.push(arr1[i] + arr2[i]) 
} 

Предполагая arr1 и arr2 имеют одинаковую длину.

1

Если два массива имеют равную длину, вы можете использовать Array.prototype.map();

var data1 = [1,2,3,4], 
 
    data2 = [2,3,4,4], 
 
    result; 
 
result = data1.map(function(value, i){ 
 
    return value + data2[i]; 
 
}); 
 
console.log(result);

+0

, это прекрасно, но моя проблема в том, что я сплайсирую массив, используя for loop, если вы видите, я добавил цикл for в свой вопрос. –

+0

@GopalRohila Я думаю, решение для переменной массива, предоставляемое KevBot, должно решить вашу проблему. – GibboK

Смежные вопросы