【发布时间】:2022-01-21 02:57:20
【问题描述】:
我正在尝试将嵌套对象过滤成两部分,然后如果有任何匹配的兄弟要返回,则返回父(和兄弟)对象。
我一直在查看 this SO 线程作为参考。
我认为我很接近,但不太确定我做错了什么。
我有一个order,看起来像这样:
{
"name": "Name",
"email": "email@email.com",
"createdAt": "2021-12-01T21:19:29.682Z",
"purchasables": [
{
"type": "FOO",
...
},
{
"type": "BAR",
...
}
]
}
任何给定的订单都可以包含多个东西(可购买)。我正在尝试过滤订单日期order.createdAt,然后过滤可购买的类型。
// vue.js
data() {
return {
items: [],
day: dayjs()
};
},
props: {
orders: {
type: Array,
required: false,
default: () => [],
},
},
methods: {
filterPurchasables() {
this.items = this.orders.filter((order) => {
order.purchasables.every((purchasable) => {
console.log('type: ', purchasable.type); // FOO
return purchasable.type === 'FOO';
});
return dayjs(order.createdAt).isSame(this.day, "date");
});
},
},
如果我只过滤订单的createdAt 日期,一切似乎都很好。
this.items = this.orders.filter((order) => {
return dayjs(order.createdAt).isSame(this.day, "date");
});
最后,我想要找回的是:
{
"name": "Name",
"email": "email@email.com",
"createdAt": "2021-12-01T21:19:29.682Z",
"purchasables": [
{
"type": "FOO",
...
}
]
}
- 仅当日期匹配时才会返回订单
- 仅返回匹配的正确可购买物品(例如 FOO)
目前,我总是把两个可购买的东西都拿回来。我曾尝试使用.some(),但得到了相同的结果。
感谢您的任何建议!
编辑
这就是我现在所拥有的,似乎正在得到我所追求的结果。我不相信这是理想的...
this.items = this.orders.filter((order) => {
order.purchasables = order.purchasables.filter((p) =>{
return p.type === "FOO";
});
return dayjs(order.createdAt).isSame(this.day, "date");
});
【问题讨论】:
-
您正在检查 2 个条件(可购买和日期),但只使用其中一个(日期)。您需要使用
&&加入这两个条件。
标签: javascript vue.js vuejs2