使用angularjs计算数组中的重复值

时间:2015-01-23 02:30:40

标签: javascript angularjs

我有一个表格,每个问题有5个问题和3个不同答案。

e.g。 Q1。什么是你最喜欢的颜色?

单选按钮-1。价值蓝色 单选按钮-2。价值红色 单选按钮-3。值灰色

这些问题中的大多数具有相同的值(蓝色,红色,灰色),这是我想要的,但是,我试图在表格的末尾添加所有值,以便我可以确定是否填写表格的人等于其中一个值(蓝色,红色或灰色)。

我用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');
}

1 个答案:

答案 0 :(得分: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>