我要搜索JavaScript多级数组对象。
[{ “ head”:“标题1”, “列表”:[{ “ name”:“名称1”, “ desc”:“ desc 1” },{ “ name”:“名称1”, “ desc”:“ desc 1” }] },{ “ head”:“标题2”, “列表”:[{ “ name”:“名称1”, “ desc”:“ desc 1” },{ “ name”:“名称1”, “ desc”:“ desc 1” }] }]
如果我们搜索“标题2”
预期结果:
[{ “ head”:“标题2”, “列表”:[{ “ name”:“名称1”, “ desc”:“ desc 1” },{ “ name”:“名称1”, “ desc”:“ desc 1” }] }]
如果我们搜索“名称1”
预期结果:
[{ “ head”:“标题1”, “列表”:[{ “ name”:“名称1”, “ desc”:“ desc 1” },{ “ name”:“名称1”, “ desc”:“ desc 1” }] },{ “ head”:“标题2”, “列表”:[{ “ name”:“名称1”, “ desc”:“ desc 1” },{ “ name”:“名称1”, “ desc”:“ desc 1” }] }]
寻找一种优化的方式进行此搜索。谁能帮助我解决这个问题?
已更新:无效的JSON格式
答案 0 :(得分:0)
您可以递归搜索给定对象的嵌套值的所需值。
function filter(array, value) {
function find(object) {
return Object
.values(object)
.some(v => v === value || v && typeof v === 'object' && find(v));
}
return array.filter(find);
}
var array = [{ head: "Heading 1", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }, { head: "Heading 2", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }]
console.log(filter(array, "Heading 2"));
console.log(filter(array, "name 1"));
.as-console-wrapper { max-height: 100% !important; top: 0; }