2015-01-23 2 views
0

У меня есть форма с 5 вопросами и 3 различными ответами на каждый вопрос.подсчитать повторяющиеся значения в массиве с помощью angularjs

например. q1. Какой ваш любимый цвет?

радио-кнопка-1. value голубой радио кнопка-2. значение красный радио-кнопка-3. value grey

Большинство из этих вопросов имеют одинаковое значение (синий, красный, серый), что я и хочу, однако я пытаюсь добавить все значения вместе в конце формы, чтобы я мог определить если лицо, заполняющее форму, равно одному из значений (синий, красный или серый).

Я создаю эту форму с помощью angularjs, и это то, что у меня есть до сих пор.

<label>Q1. what is your favorite color?</label> 
    <div class="form-group"> 
     <div class="radio"> 
      <label> 
      <input type="radio" ng-model="formData.color" value="blue"> 
       blue 
      </label> 
     </div> 
     <div class="radio"> 
      <label> 
      <input type="radio" ng-model="formData.color" value="red"> 
       red 
      </label> 
     </div> 
     <div class="radio"> 
      <label> 
      <input type="radio" ng-model="formData.color" value="grey"> 
       grey 
      </label> 
     </div> 

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

$scope.formData = { }; 
$scope.formData = []; 
$scope.formData.sort(); 
var current = null; 
var cnt = 0; 
for (var i = 0; i < $scope.formData.length; i++) { 
    if ($scope.formData[i] != current) { 
     if (cnt > 0) { 
      console.log(current + ' shows ' + cnt + ' times'); 
     } 
     current = $scope.formData[i]; 
     cnt = 1; 
    } else { 
     cnt++; 
    } 
} 
if (cnt > 0) { 
    console.log(current + ' shows ' + cnt + ' times'); 
} 
+0

на основе вашего 'нг-model' ...' formdata' объект с одно свойство 'color'. Объекты не сортируются, поэтому ваш код контроллера немного запутан. Можете ли вы создать демо-версию с несколькими вопросами, чтобы мы могли видеть ваш контекст кода больше? – charlietfl

+0

на странице результатов будет отображаться цвет, который лучше всего представляет этот человек на основе выбранных ответов. это имеет смысл? Я часто делаю это неправильно ... http://plnkr.co/edit/FtL8arjcHPUEbs4r1BJS – Society43

+0

удобный трюк для чтения данных с использованием углового 'json' filter ..' {{formData | json}}' – charlietfl

ответ

1

Вот пример решения plunker. Будет ли это работать?

контроллер

$scope.questions = [ 
    'Q1. what is your favorite color?', 
    'Q2. what color is your car?', 
    'Q3. what color best represents you?' 
    ]; 
    $scope.formData = []; 

    $scope.stats = function() { 
    $scope.results = {}; 
    for (var i = 0; i < $scope.formData.length; i++) { 
     var color = $scope.formData[i]; 
     if(color) { 
     if ($scope.results.hasOwnProperty(color)) { 
      $scope.results[color]++; 
     } else { 
      $scope.results[color] = 1; 
     } 
     } 
    } 
    }; 

шаблон

<div class="form-group" ng-repeat="q in questions"> 
    <label>{{q}}</label> 
    <div class="radio"> 
    <label> 
     <input type="radio" ng-model="formData[$index]" value="blue">blue 
    </label> 
    </div> 
    <div class="radio"> 
    <label> 
     <input type="radio" ng-model="formData[$index]" value="red">red 
    </label> 
    </div> 
    <div class="radio"> 
    <label> 
     <input type="radio" ng-model="formData[$index]" value="grey">grey 
    </label> 
    </div> 
</div> 

<button ng-click="stats()">show results</button> 

<ul> 
<li ng-repeat="(c, n) in results"> {{c}} shows {{n}} times</li> 
</ul> 
+0

Поэтому вместо повторения радио ярлыков «синий, красный, серый» для каждого вопроса в ng-repeat мне нужно будет иметь разные ответы для каждого вопроса, сохраняя при этом значения одинаковыми. – Society43

+0

Один из подходов может состоять в том, чтобы начать думать, какова структура данных для ваших ответов. Например, [{value11: label11, value12: label12, ....}, {value21: label21, value22: label22, ...} ...] и следующий пример, как закодировать их в ваших контроллерах и шаблонах – klode

+0

ответов [1] = {значение11: label11, value12: label12, ....}; ответы [2] = {значение21: label21, значение22: label22, ...} – klode