У меня вложенный JSON выглядит так
[
{arrivalTime: "10:30 PM"availableSeats: 23
boardingPoints: [{id: "3882"location: "abc"time: "02:30PM"},{id: "3882"location: "xyz"time: "02:30PM"}]
busType: "Scania Metrolink"commPCT: 8
departureTime: "1:15 PM"droppingPoints: null
},
{arrivalTime: "10:30 PM"availableSeats: 23
boardingPoints: [{id: "3882"location: "def"time: "02:30PM"},{id: "3882"location: "jkl"time: "02:30PM"}]
busType: "Scania "commPCT: 8
departureTime: "1:15 PM"droppingPoints: null
}
]
Из этого я хочу получить новый массив, который соответствует условию.
Вот
1. получить новый массив только с указанным пользователем location
в boardingPoints
объект.
Например: предположим, что значение местоположения xyz
он вернет только JSON с
который содержит местоположение xyz
только в boardingPoints
объект.
выход
{прибытиеВремя: «10:30 вечера» Доступные места: 23
boardingPoints: [{id: «3882» location: «abc» time: «02:30 PM»}, {id: «3882» location: «хуг«время:» 02:30 вечера «}]
busType: «Scania Metrolink», связь: 8
Время отправления: «1:15 вечера»
}
eg-b: предположим, значение местоположения xyz
а также def
он должен возвращать только с JSON, который содержит два вышеуказанных местоположения только в boardingPoints
объект.
выход
{прибытиеВремя: «10:30 вечера» Доступные места: 23
boardingPoints: [{id: «3882» location: «abc» time: «02:30 PM»}, {id: «3882» location: «хуг«время:» 02:30 вечера «}]
busType: «Scania Metrolink», связь: 8
Время отправления: «1:15 вечера»
},
{прибытиеВремя: «10:30 вечера» Доступные места: 23
boardingPoints: [{id: «3882» location: «Защита«time:» 02:30 PM «}, {id:» 3882 «location:» jkl «time:» 02:30 PM «}]
busType: «Scania», связь: 8
Время отправления: «1:15 вечера»
}
Я знаю, что это может быть реализовано с помощью lodash
но я не знаю как это сделать
В настоящее время я знаю только о матчах в lodash
но я не знаю, как я могу использовать это в моем случае.
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, _.matches({ 'age': 40}));
// → [{ 'user': 'fred', 'age': 40, 'active': false }]
Это возможно с родным методом в JavaScript?
Вы можете использовать серию вызовов lodash с некоторой логикой, чтобы получить ожидаемые результаты. Что-то вроде этого:
var _ = require('lodash');
var result = [
{
arrivalTime: "10:30 PM",
availableSeats: 23,
boardingPoints: [{
id: "3882",
location: "abc",
time: "02:30PM"},{
id: "3882",
location: "xyz",
time: "02:30PM"}],
busType: "Scania Metrolink",
commPCT: 8,
departureTime: "1:15 PM",
droppingPoints: null,
},
{
arrivalTime: "10:30 PM",
availableSeats: 23,
boardingPoints: [{
id: "3882",
location: "def",
time: "02:30PM"},{
id: "3882",
location: "jkl",
time: "02:30PM"}],
busType: "Scania ",
commPCT: 8,
departureTime: "1:15 PM",
droppingPoints: null
}
];
var locations = ['xyz'];
var f = _.filter(result, function(obj) {
var value = _.map(obj.boardingPoints, 'location');
var i, len;
for (i = 0, len = locations.length; i < len; i++) {
if (_.indexOf(value, locations[i]) >= 0) {
return true;
}
}
return false;
});
console.log(f); // result is your eg-a
когда
locations = ['xyz', 'def'];
результатом будет ваш eg-b
Другой подход к решению заключается в том, чтобы связать вызовы с помощью intersection ():
var f = _.filter(result, function(obj) {
return _.chain(obj.boardingPoints).map('location').intersection(locations).value().length > 0;
});
var result = _.filter(yourArray, function(item) {
return _.size(_.intersection(['xyz', 'def'], _.map(item.boardingPoints, 'location')));
});