无法在 table 中过滤使用 Vue 计算的深层数组对象
Can't filter deep array object in computed with Vue in a table
我一直在尝试很多方法来过滤数据,比如只使用方法或观察者,但我无法实现我想要的。基本上,当我在输入中搜索某些内容时,我只希望 table 显示该项目及其到达方式。现在我正在尝试使用 computed 并且我总是得到一个错误说 'filter of undefined' 和类似的东西。这是我计算的:
computed: {
filterData() {
return this.testData.filter(
data =>
!this.search ||
data.building.toLowerCase().includes(this.search.toLowerCase()) ||
data.children.some(item =>
item.floor.toLowerCase().includes(this.search.toLowerCase())
)
);
}}
这是我要过滤的数据:
data: () => ({
search: "",
testData: [
{
id: 1,
building: "foo 1",
children: [
{ id: 11, floor: "bar 1" },
{ id: 12, floor: "bar 2" },
{
id: 13,
floor: "bar 3",
children: [
{
id: 131,
door: "cor 1"
}
]
}
]
},
{
id: 2,
building: "foo 2",
children: [
{ id: 21, floor: "bar 3" },
{ id: 22, floor: "bar 4" },
{
id: 23,
floor: "bar 5",
children: [
{
id: 231,
door: "cor 2"
},
{
id: 232,
door: "cor 3"
}
]
}
]
}
]
我创建了一个沙箱,以便更轻松地解释 => https://codesandbox.io/s/modest-paper-vwes5
提前致谢!
编辑:我错了,过滤有效,但你的数据非常相似,所以输入例如。 "bar" 似乎什么都不做。您需要输入 "foo 2" 或 "4" 或 "5" 才能看到效果。
我一直在尝试很多方法来过滤数据,比如只使用方法或观察者,但我无法实现我想要的。基本上,当我在输入中搜索某些内容时,我只希望 table 显示该项目及其到达方式。现在我正在尝试使用 computed 并且我总是得到一个错误说 'filter of undefined' 和类似的东西。这是我计算的:
computed: {
filterData() {
return this.testData.filter(
data =>
!this.search ||
data.building.toLowerCase().includes(this.search.toLowerCase()) ||
data.children.some(item =>
item.floor.toLowerCase().includes(this.search.toLowerCase())
)
);
}}
这是我要过滤的数据:
data: () => ({
search: "",
testData: [
{
id: 1,
building: "foo 1",
children: [
{ id: 11, floor: "bar 1" },
{ id: 12, floor: "bar 2" },
{
id: 13,
floor: "bar 3",
children: [
{
id: 131,
door: "cor 1"
}
]
}
]
},
{
id: 2,
building: "foo 2",
children: [
{ id: 21, floor: "bar 3" },
{ id: 22, floor: "bar 4" },
{
id: 23,
floor: "bar 5",
children: [
{
id: 231,
door: "cor 2"
},
{
id: 232,
door: "cor 3"
}
]
}
]
}
]
我创建了一个沙箱,以便更轻松地解释 => https://codesandbox.io/s/modest-paper-vwes5
提前致谢!
编辑:我错了,过滤有效,但你的数据非常相似,所以输入例如。 "bar" 似乎什么都不做。您需要输入 "foo 2" 或 "4" 或 "5" 才能看到效果。