2015-03-07 2 views
2

Я довольно новый для AngularJS (и для разработки в целом). Я пытаюсь создать простую игру, и у меня есть одна проблема.Колонки столбцов сумм в AngularJS

Пользователь может добавлять слова в список и мой скрипт автоматически ассоциирует 5 случайных чисел (в определенном диапазоне) для каждого элемента со следующим:

$scope.randomNum = getNum(); 
function getNum() { 
    var arr = []; 
    min = 1; 
    max = 5; 
    for (i=0; i<5; i++) { 
     arr.push(Math.floor(Math.random() * (max - min + 1)) + minEffort); 
    } 
    return arr; 
} 

Я хотел бы динамически получить суммы столбцы этих массивов. Например, если пользователь добавляет три слова:

  • Первая
  • Второй
  • Третий

и эти слова получают соответственно следующие случайные числа:

  • [0, 5,2,4,2]
  • [3,5,1,2,1]
  • [4,3,4,1,2]

мне нужно нажать на странице в общей сложности каждого столбца: 7, 13, 7, 7, 5. И еще мне нужно использовать эти суммы для продолжения математики.

Как это сделать?

EDIT Я наткнулся на этот фильтре:

app.filter('sumByKey', function() { 
    return function (data, key) { 
    if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
     return 0; 
    } 

    var sum = 0; 
    for (var i = data.length - 1; i >= 0; i--) { 
     sum += parseInt(data[i][key]); 
    } 

    return sum; 
    }; 
}); 

Это позволяет мне получить сумму для одного колонн с

{{items|sumByKey: 'randomNum[i]'}} 

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

ответ

1

$ scope.sums будет содержать сумму всех collumns. Вы можете использовать его дальше.

$scope.words = []; 
$scope.sums = []; 
$scope.getNum = function() { 
    var arr = []; 
    min = 1; 
    max = 5; 
    for (i = 0; i < 5; i++) { 
     arr.push(Math.floor(Math.random() * (max - min + 1)) + minEffort); 
    } 
    return arr; 
}; 

//add word and associate random number arrays 
$scope.add_word = function (word) { 
    $scope.words.push({word_text: word, numbers: $scope.getNum()}); 
}; 

//give colums sums,no matter what how many rows are 
$scope.get_colums_sum = function() { 
    angular.forEach($scope.words, function (word, key) { 
     angular.forEach(word.numbers, function (number, key) { 
      if (isNaN($scope.sums[key])) { 
       $scope.sums[key] = number; 
      } else { 
       $scope.sums[key] = $scope.sums[key] + number; 
      } 
     }); 
    }); 
    console.log($scope.sums); 
}; 

$scope.add_word('first word'); 
$scope.add_word('second word'); 
$scope.add_word('third word'); 
$scope.get_colums_sum(); 
+0

Большое спасибо mudasser. Я не уверен, почему я получаю «undefined» для get_colums_sum() ... Я поместил свой код в JSFiddle, но, видимо, он вообще не работает: https://jsfiddle.net/nitecorp/n61cmkfg/2/ Пока на моем локальном сервере работает все, кроме суммы ... –

+0

@MirkoG.вам не удалось определить $ scope.sums в контроллере, который использовался в функции get_col_sum. Здесь plnkr http://plnkr.co/edit/fDgY0syOUacSXtJVBQlr?p=preview, $ scope.sums - массив, который содержит общее количество всех столбцов. –

+0

Спасибо Mudasser. Если я верну сумму, произойдет что-то странное: первая сумма выглядит так, как число первого массива повторяется дважды, а затем сумма изменяется, как только я ввожу что-то в текстовое поле ввода: http: // plnkr. co/edit/ltNwhJupqfWINHc8cl1N? p = preview :( –

0

Предполагая, что каждый массив имеет одинаковую длину (5 элементов в этом случае), вы можете применить следующий алгоритм.

array_of_arrays будет массив из массивов просуммировать, то это означает:

var array_to_arrays = [[0,5,2,4,2], [3,5,1,2,1], [4,3,4,1,2]]; 

function sumCols(array_to_arrays) { 
    var sum = 0; 
    var sum_cols = []; 
    for(var i = 0; i < 5; i++) { 
     for(var j = 0; j < array_to_arrays.length; j++) { 
     sum += array_to_arrays[j][i]; 
     } 
     sum_cols.push(sum); 
     sum = 0; 
    } 
    return sum_cols; 
} 

Я создал plnkr с примером: http://plnkr.co/edit/0FElcQamh9b7nHbQDMkn?p=preview

+0

Спасибо, Fran, как я могу сделать это решение независимым от количества массивов? array_to_array может содержать от 0 до N массивов. Как мне динамически получить его? –

+0

Функция не зависит от длины '' '' array_to_arrays''''. Единственное предположение состоит в том, что каждый компонент должен быть одинаковой длины (в этом случае пять). –

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