2017-09-22 15 views
0

私が持っているリストなしngのリピート:AngularJS:OBJSの同様のキー

[{ 
key:test1 
name: name1 
}, 
{ 
key:test1 
name: name2 
}, 
{ 
key:test2 
name: name3 
}] 

、私はそれを表示するためにng-repeatを使用します。

<tr ng-repeat=item in list> 
    <td>{{item.key}}</td> 
    <td>{{item.name}}</td> 
</tr> 

はそれが可能に変更することなく、同様のキーと値を組み合わせることです構造?私の場合、今

に二回test1に表示されるものではない。

test1 : name1 

test1 : name2 

test2 : name3 


desired result: 

test1 : name1 

_____ name2 

test2 : name3 
+0

は、あなたが希望する結果を投稿することができますか? – Komal

+0

[JavaScript配列から複製を削除](https://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array)の可能な複製 –

答えて

1

あなたはgroupByフィルタを使用することができます:ここで

angular.module('app', ['angular.filter']).controller('ctrl', function($scope){ 
 
    $scope.list = [{ 
 
    key:'test1', 
 
    name: 'name1' 
 
    }, { 
 
    key:'test1', 
 
    name: 'name2' 
 
    },{ 
 
    key:'test1', 
 
    name: 'name3' 
 
    },{ 
 
    key:'test2', 
 
    name: 'name4' 
 
    }]; 
 
})
table, th, td { 
 
    border: 1px solid black; 
 
    border-collapse: collapse; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.16/angular-filter.js"></script> 
 

 
<table ng-app='app' ng-controller='ctrl'> 
 
    <tbody> 
 
    <tr ng-repeat-start="(key, value) in list | groupBy: 'key'">  
 
     <td>{{key}}</td> 
 
     <td>{{value[0].name}}</td> 
 
    </tr> 
 
    <tr ng-repeat-end ng-repeat='item in value.splice(1)'> 
 
     <td></td> 
 
     <td>{{item.name}}</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

このグループから$ indexを取得して、現在のアイテムを取得する方法を知っていますかリスト? – Lola

+0

グループ内のインデックス: '$ index';リスト全体のインデックス: 'list.indexOf(item)' –

1
ng-repeat="item in list | unique:'key'" 
1

をあなたが達成できる方法であります一般的なkeyの値私はangular-filterを使用して配置します。

angular.module('app',['angular.filter']).controller('mainCtrl', function($scope){$scope.list = [{ 
 
     key:'test1', 
 
     name: 'name1' 
 
     }, 
 
     { 
 
     key:'test1', 
 
     name: 'name2' 
 
     }, 
 
     { 
 
     key:'test2', 
 
     name: 'name3' 
 
     }] 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.16/angular-filter.min.js"></script> 
 

 

 
<div ng-app='app' ng-controller='mainCtrl'> 
 
    <div ng-repeat="(key, value) in list | groupBy: 'key'"> 
 
     <span ng-repeat='val in value'>{{val.name}} </span> 
 
    </div>  
 
</div>

0

ng-repeat更新リストを使用する前に。

function rd(o, k, v) { 
    var n = []; 
    var l = {}; 

    for(var i in o) { 
     if (l.hasOwnProperty(o[i][k])){ 
     o[i][v] = l[o[i][k]][v]+ " " + o[i][k] 
     l[o[i][k]] = o[i] 
     } else{ 
     l[o[i][k]] = o[i]; 
     } 
    } 

    for(i in l) { 
     n.push(l[i]); 
    } 
    return n; 
} 

var list = rd(arr, "key", "name"); 
0

あなたはこれを試すことができます。

var app = angular.module('myApp', ['angular.filter']); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.items = [{ 
 
    "key":"test1", 
 
    "name": "name1" 
 
    }, 
 
    { 
 
    "key":"test1", 
 
    "name": "name2" 
 
    }, 
 
    { 
 
    "key":"test2", 
 
    "name": "name3" 
 
    }]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<script 
 
src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.16/angular-filter.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <div ng-repeat="item in items | groupBy: 'key'"> 
 
    \t <h3>Key : {{item[0].key}}</h3> 
 
     <p>Names : <span ng-repeat='i in item'>{{i.name}} </span></p> 
 
    </div> 
 
</div>