【发布时间】:2021-06-14 01:33:06
【问题描述】:
我正在寻找修复我当前的函数,该函数搜索所有可能的匹配项并提供一个完整的嵌套数组,但它适用于一个级别。
我正在尝试使用过滤器并通过循环搜索所有属性。
不知何故,它不适用于所有场景。
data = [
{
id: "m1",
name: "data1",
val: "D",
items: [
{
id: "d1",
name: "datanested1",
val: "D",
items: [
{
id: "1",
name: "direct Data",
val: "E"
},
{
id: "2",
name: "test",
val: "E"
}
]
}
]
},
{
id: "d2",
name: "data2",
val: "D",
items: [
{
id: "21",
name: "test21",
val: "E"
},
{
id: "22",
name: "test23",
val: "E"
}
]
},
{
id: "d3",
name: "data23",
val: "D",
items: [
{
id: "31",
name: "test data 3",
val: "E"
},
{
id: "32",
name: "test data 4",
val: "E"
}
]
}
];
function getFilteredData(searchText) {
return data.filter(item => {
return Object.keys(item).some(key => {
return String(item[key])
.toLowerCase()
.includes(searchText.toLowerCase());
});
});
}
console.log("data search level1", getFilteredData("data"));
//expected output
// [
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// {
// id: "2",
// name: "B Data",
// val: "E"
// }
// ]
// }
// ]
// },
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// items: [
// {
// id: "31",
// name: "test data 3",
// val: "E"
// },
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
console.log("data search level2", getFilteredData("datanested1"));
//expected output
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// {
// id: "2",
// name: "B Data",
// val: "E"
// }
// ]
// }
// ]
// }
console.log("data search level3", getFilteredData("direct"));
//expected output
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// ]
// }
// ]
// }
console.log("data search level2 common", getFilteredData("test"));
//expected output
// [
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// items: [
// {
// id: "31",
// name: "test data 3",
// val: "E"
// },
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
console.log("data search level1 common", getFilteredData("2"));
// [
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// {
// id: "2",
// name: "test",
// val: "E"
// }
// ]
// }
// ]
// },
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
下面是我正在尝试的stackblitz。
【问题讨论】:
-
您想要的结果不清楚。如果嵌套项包含想要的字符串,你想要父项吗?如果父级包含搜索字符串,是否要包含完整对象?为什么结果中缺少某些项目,例如
'test',缺少节点 m1。通过搜索'2',缺少节点32,因为父节点...
标签: javascript arrays loops filter