consider the data :
let orders = {
"data": [
{
"email": "[email protected]", "orders": [
{ "orderName": "something", "price": "43$" },
{ "orderName": "anotherthing", "price": "4$" }
]
},{
"email": "[email protected]", "orders": [
{ "orderName": "fish", "price": "43$" },
{ "orderName": "parrot", "price": "4$" }
]
}
]
};
I'm trying to filter the orders of the object with some email like:
email = '[email protected]'
x=orders.data.filter(o =>{if (o.email === email) return o.orders});
but the whole return value is the whole matching object, with email and orders, and I don't want the whole object , I want only the orders.
consider the data :
let orders = {
"data": [
{
"email": "[email protected]", "orders": [
{ "orderName": "something", "price": "43$" },
{ "orderName": "anotherthing", "price": "4$" }
]
},{
"email": "[email protected]", "orders": [
{ "orderName": "fish", "price": "43$" },
{ "orderName": "parrot", "price": "4$" }
]
}
]
};
I'm trying to filter the orders of the object with some email like:
email = '[email protected]'
x=orders.data.filter(o =>{if (o.email === email) return o.orders});
but the whole return value is the whole matching object, with email and orders, and I don't want the whole object , I want only the orders.
Share Improve this question edited Jun 11, 2019 at 13:50 Harel.Lebel asked Jun 11, 2019 at 13:34 Harel.LebelHarel.Lebel 2896 silver badges17 bronze badges 3- 3 why not just map after filter? – Austaras Commented Jun 11, 2019 at 13:36
- Possible duplicate of From an array of objects, extract value of a property as array – Heretic Monkey Commented Jun 11, 2019 at 13:42
-
filter
just checks whether the value returned by the function is truthy or not, it doesn't use it as the result. – Barmar Commented Jun 11, 2019 at 13:51
4 Answers
Reset to default 6You can't do with filter
alone, you also need to map
:
orders.data.filter(o => o.email === '[email protected]').map(o => o.orders)
You cannot do this with .filter
as the method will only return a subsection if the array, while you want to also transform it.
You can chain Array#filter
with Array#map
to produce the result:
let orders = { "data": [{ "email": "[email protected]", "orders": [{ "orderName": "something", "price": "43$" }, { "orderName": "anotherthing", "price": "4$" } ] }, { "email": "[email protected]", "orders": [{ "orderName": "fish", "price": "43$" }, { "orderName": "parrot", "price": "4$" } ] }]};
email = '[email protected]';
x = orders.data
.filter(o => o.email === email)
.map(o => o.orders);
console.log(x);
If you expect a single element here, you can use Array#find
instead:
let orders = { "data": [{ "email": "[email protected]", "orders": [{ "orderName": "something", "price": "43$" }, { "orderName": "anotherthing", "price": "4$" } ] }, { "email": "[email protected]", "orders": [{ "orderName": "fish", "price": "43$" }, { "orderName": "parrot", "price": "4$" } ] }]};
email = '[email protected]';
x = orders.data
.find(o => o.email === email)
.orders;
console.log(x);
An alternative is to use find
and then just reference orders
when needed. Adding || {'orders': 'Email not found'};
after will catch if the email isn't found
let orders = {
"data": [{
"email": "[email protected]",
"orders": [{
"orderName": "something",
"price": "43$"
},
{
"orderName": "anotherthing",
"price": "4$"
}
]
}, {
"email": "[email protected]",
"orders": [{
"orderName": "fish",
"price": "43$"
},
{
"orderName": "parrot",
"price": "4$"
}
]
}]
};
email = '[email protected]'
x = orders.data.find(o => {
return o.email === email
}) || {
'orders': 'Email not found'
};
console.log(x.orders);
email = '[email protected]'
x = orders.data.find(o => {
return o.email === email
}) || {
'orders': 'Email not found'
};
console.log(x.orders);
let orders = {
"data": [
{
"email": "[email protected]", "orders": [
{ "orderName": "something", "price": "43$" },
{ "orderName": "anotherthing", "price": "4$" }
]
},{
"email": "[email protected]", "orders": [
{ "orderName": "fish", "price": "43$" },
{ "orderName": "parrot", "price": "4$" }
]
}
]
};
const filteredOrders = orders.data.map((o) => o.email === '[email protected]' ? o.orders : null).filter(o => o);
console.log(filteredOrders)
You can map first too and filter after that the valid results.
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745637986a4637512.html
评论列表(0条)