Фильтровать уникальные значения из JSON
Я использую 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"
}
]
Ответы
Ответ 1
Вы можете использовать пользовательский интерфейс Angular, который имеет фильтр unique
.
Источник можно найти здесь.
В принципе, вы можете использовать фильтр следующим образом:
<div ng-repeat="item in result | unique:'_id'">
//Body here
</div>
Ответ 2
Вы можете использовать фильтр 'unique' (aliases: uniq) в модуле angular.filter(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: Мы фильтруем по идентификатору клиента, т.е. удаляем дубликатов клиентов
<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
baz 30
Ответ 3
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)
http://jsfiddle.net/C97DJ/165/