ページにangularjsを使用しています。 JSONオブジェクトから値をフィルター処理して、冗長性が存在しないようにしたい。しかし、angular ng-repeatから一意の値を取得する方法が見つかりませんでした。それを行う方法はありますか?
さて、質問についての説明です。この形式のJSONがあります。このJSONはサービスから取得しています。したがって、繰り返しデータがどのように発生するかは予想できません。
result = [
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
},
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
},
{
_id: "500005",
subject: "Attend to the event",
date: "2 Jan, 2013"
},
{
_id: "500065",
subject: "Some task deadline",
date: "20 Sep, 2013"
},
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
}
]
出力JSONに要素が繰り返されないようにしたいので、出力は次のようになります
result = [
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
},
{
_id: "500005",
subject: "Attend to the event",
date: "2 Jan, 2013"
},
{
_id: "500065",
subject: "Some task deadline",
date: "20 Sep, 2013"
}
]
Angular unique
フィルターが定義されているUIを使用できます。
ソースは here で見つかります。
基本的には、次のようにフィルターを使用できます。
<div ng-repeat="item in result | unique:'_id'">
//Body here
</div>
Angular.filterモジュールで「unique」(エイリアス:uniq)フィルターを使用できます( https://github.com/a8m/angular-filter )
使用法: colection | uniq: 'property'
ネストされたプロパティでフィルタリングできます:colection | uniq: 'property.nested_property'
だからあなたはそのようなことをすることができます。
function MainController ($scope) {
$scope.orders = [
{ id:1, customer: { name: 'foo', id: 10 } },
{ id:2, customer: { name: 'bar', id: 20 } },
{ id:3, customer: { name: 'foo', id: 10 } },
{ id:4, customer: { name: 'bar', id: 20 } },
{ id:5, customer: { name: 'baz', id: 30 } },
];
}
HTML:お客様IDでフィルタリングします。つまり、重複するお客様を削除します
<th>All customers list: </th>
<tr ng-repeat="order in orders | unique: 'customer.id'" >
<td> {{ order.customer.name }} , {{ order.customer.id }} </td>
</tr>
結果:すべての顧客リスト:
foo 10
バー20
バズ30
var data = [
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
},
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
},
{
_id: "500005",
subject: "Attend to the event",
date: "2 Jan, 2013"
},
{
_id: "500065",
subject: "Some task deadline",
date: "20 Sep, 2013"
},
{
_id: "500004",
subject: "Complete the task",
date: "25 Aug, 2013"
}
]
var uniqueNames = [];
var uniqueObj = [];
for(i = 0; i< data.length; i++){
if(uniqueNames.indexOf(data[i]._id) === -1){
uniqueObj.Push(data[i])
uniqueNames.Push(data[i]._id);
}
}
console.log('uniqueObj',uniqueObj)