我正在尝试过滤一个对象数组中名为“miles”的属性。 它应该比较属性“miles”的值并返回那些仅小于用户英里数的值。 接下来,将属性“city”的值推入一个空数组并返回它。
我无法让它返回城市/国家,因为它只是返回一个空数组。
这是我的代码:
let flights = [{origin: 'AEP', destinations:[{city: 'PARIS', miles: 500}, {city: 'BOLZANO', miles: 200}, {city: 'DUBAI', miles: 400}]}, {origin: 'MXP', destinations: [{city: 'SAINT-TROPEZ', miles: 30}]},{origin: 'AEP', destinations: [{city: 'LISBON', miles: 30}, {city: 'MADRID', miles: 700}, {city: 'NICE', miles: 200}]}]
let user = {
name: 'Elena',
miles: 450,
origin: 'AEP'
}
function closureTrip(flights){
let list = [];
let array = [];
return function(user) {
for (let i = 0; i < flights.length; i++) {
if (flights[i].origin === user.origin) {
list.push(flights[i].destinations);
for (let j = 0; j < list.length; j++){
if(list[j].miles <= user.miles){
array.push(list[j].city);
}
return array
}
}
}
}
}
我的预期:
closureTrip(flights)(user) => [ 'BOLZANO', 'DUBAI', 'LISBON', 'NICE' ]
我得到的:
closureTrip(flights)(user) => []
您可以执行以下操作:
Array#filter
获取数组中与用户同源的所有元素。Array#flatMap
创建一个包含上一步中所有城市的一维数组。Array#filter
只获取英里数不超过用户的城市。Array#map
只提取那些城市的名称。let flights = [{origin: 'AEP', destinations:[{city: 'PARIS', miles: 500}, {city: 'BOLZANO', miles: 200}, {city: 'DUBAI', miles: 400}]}, {origin: 'MXP', destinations: [{city: 'SAINT-TROPEZ', miles: 30}]},{origin: 'AEP', destinations: [{city: 'LISBON', miles: 30}, {city: 'MADRID', miles: 700}, {city: 'NICE', miles: 200}]}];
let user = {
name: 'Elena',
miles: 450,
origin: 'AEP'
};
function closureTrip(flights) {
return user =>
flights.filter(f => f.origin === user.origin).flatMap(f => f.destinations)
.filter(o => o.miles <= user.miles).map(o => o.city);
}
console.log(closureTrip(flights)(user));
首先,使用过滤器来保持条目的正确来源。然后使用 flatMap 从一个数组中的所有这些条目中获取所有目的地。然后,过滤不太远的目的地。最后,对于每个条目,只返回 city 属性。结果将是一个数组。
let flights = [{origin: 'AEP', destinations:[{city: 'PARIS', miles: 500}, {city: 'BOLZANO', miles: 200}, {city: 'DUBAI', miles: 400}]}, {origin: 'MXP', destinations: [{city: 'SAINT-TROPEZ', miles: 30}]},{origin: 'AEP', destinations: [{city: 'LISBON', miles: 30}, {city: 'MADRID', miles: 700}, {city: 'NICE', miles: 200}]}]
let user = {
name: 'Elena',
miles: 450,
origin: 'AEP'
}
console.log(
flights.filter(i => i.origin===user.origin)
.flatMap(i => i.destinations)
.filter(i => i.miles <= user.miles)
.map(i => i.city)
)
filter
出发地与用户匹配的航班。loop
过滤后的航班和 filter
目的地里程小于用户里程的航班。map
过滤的目的地,只保留城市。merge
传播运算符的结果。工作演示-
let flights = [{origin: 'AEP', destinations:[{city: 'PARIS', miles: 500}, {city: 'BOLZANO', miles: 200}, {city: 'DUBAI', miles: 400}]}, {origin: 'MXP', destinations: [{city: 'SAINT-TROPEZ', miles: 30}]},{origin: 'AEP', destinations: [{city: 'LISBON', miles: 30}, {city: 'MADRID', miles: 700}, {city: 'NICE', miles: 200}]}];
let user = {
name: 'Elena',
miles: 450,
origin: 'AEP'
}
let result = [];
flights.filter(f => f.origin == user.origin).forEach(f => {
let r = f.destinations.filter(d => d.miles < user.miles).map(i => i.city)
result = [...result, ...r]
})
console.log(result)