У меня есть следующий объект JSON:
{
'name' : 'John',
'friends' : [
{
'id' : 1,
'name' : 'George',
'level' : 10
},
{
'id' : 2,
'name' : 'Stacy',
'level' : 8
},
{
'id' : 3,
'name' : 'Fred',
'level' : 10
},
{
'id' : 4,
'name' : 'Amy',
'level' : 7
},
{
'id' : 5,
'name' : 'Bob',
'level' : 10
}
]
}
Итак, как вы видите, у вас есть объект (человек?), Который имеет name
и массив объектов- friend
. У каждого объекта-друга есть id
, name
и level
.
То, что я хотел бы сделать, - выбрать всех друзей уровня 10 из этого массива и в другую переменную/объект, называемый var level10Friends
.
Я использую AngularJS, и все это должно произойти в моем контроллере, но это необязательно должно быть проблемой AngularJS, вы также можете использовать функции ванильного JavaScript.
Честно говоря, я даже не знаю, возможно ли это, и поиск в Интернете, похоже, ничего не говорит о чем-то подобном...
Используйте
Array.prototype.filter()
. Методfilter()
создает новыйarray
со всеми элементами, которые проходят тест, реализованный предоставленной функцией.
var users = {
'name': 'John',
'friends': [{
'id': 1,
'name': 'George',
'level': 10
}, {
'id': 2,
'name': 'Stacy',
'level': 8
}, {
'id': 3,
'name': 'Fred',
'level': 10
}, {
'id': 4,
'name': 'Amy',
'level': 7
}, {
'id': 5,
'name': 'Bob',
'level': 10
}]
};
var wantedData = users.friends.filter(function(i) {
return i.level === 10;
});
console.log(wantedData);
Используя функции стрелок, вы можете сделать это как:
var filteredFriends = list.friends.filter( p => p.level === 10 );
Попробуй это:
var level10friends = list.friends.filter(function(p){return p.level == 10;});
Взгляни!
angular
.module('test', [])
.value('user', {
'name' : 'John',
'friends' : [{
'id' : 1,
'name' : 'George',
'level' : 10
},
{
'id' : 2,
'name' : 'Stacy',
'level' : 8
},
{
'id' : 3,
'name' : 'Fred',
'level' : 10
},
{
'id' : 4,
'name' : 'Amy',
'level' : 7
},
{
'id' : 5,
'name' : 'Bob',
'level' : 10
}]
})
.controller('TestCtrl', function TestCtrl($scope, user) {
var vm = $scope;
vm.level10friends = (function(friends, REQUIRED_LEVEL) {
var res = [];
for(var friend, i = 0, len = friends.length; i < len; i++) {
friend = friends[i];
if(friend.level === REQUIRED_LEVEL) {
res.push(friend);
}
}
return res;
}).call(this, user.friends || [], 10);
})
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="test">
<div ng-controller="TestCtrl">
<div ng-bind="level10friends | json"></div>
</div>
</article>
Просто нашла этот плагин сегодня утром http://linqjs.codeplex.com/
Его способ запросить JSON с помощью функции linq. Я ЛЮБЛЮ ЭТО ^^
РЕДАКТИРОВАТЬ:
маленький пример для вашего случая:
var jsonArray = {your-json-array}
var level10Friends = Enumerable.From(jsonArray)
.Where("$.user.level == 10")
.Select("$.user.name")
.ToArray();