var gData = [
{
id: "1",
name: "测试1",
list: [
{
id: "2",
name: "测试1-2",
list: []
}
]
},
{
id: "3",
name: "测试2",
list: [
{
id: "4",
name: "测试2-2",
list: []
}
]
},
{
id: "5",
name: "测试3",
list: [
{
id: "6",
name: "测试3-2-1",
list: [
{
id: "9",
name: "测试3-2-1-1",
list: []
},
{
id: "10",
name: "测试3-2-1-2",
list: []
},
{
id: "11",
name: "测试3-2-1-3",
list: []
}
]
},
{
id: "7",
name: "测试3-2-2",
list: [
{
id: "12",
name: "测试3-2-2-1",
list: []
},
{
id: "13",
name: "测试3-2-2-2",
list: []
},
{
id: "14",
name: "测试3-2-2-3",
list: []
},
{
id: "15",
name: "测试3-2-2-4",
list: [
{
id: "16",
name: "测试3-2-2-4-1",
list: null
},
{
id: "17",
name: "测试3-2-2-4-2",
list: null
}
]
}
]
},
{
id: "8",
name: "测试3-2-3",
list: [
{
id: "18",
name: "测试3-2-3-1",
list: [
{
id: "19",
name: "测试3-2-3-1-1",
list: null
},
{
id: "20",
name: "测试3-2-3-1-2",
list: null
}
]
}
]
}
]
}
];
function Get() {
/**
* ! 查看需要查找的值 默认返回所有对象
* ! 查找的是 对象 -> 数组 -> 对象 -> 数组 ----- -> 对象(有值 返回)
* @param {*} data 数据
* @param {*} str 需要查找的
* @param {*} opt 配置对象
* oKey: 根据那个 key 的 val 做对比 必填
* sKey: 对象数组中 数组的那个key 必填
* last: 是否只要最后一个 默认 fasle 值 true false
* rKey: 返回的数组中 是全部 还是某一个 key 默认 全部
*/
this.GetData = function (data, str, opt) {
var dOpt = {
last: false,
back: "val",
rKey: false
};
var {
last,
oKey = false,
sKey = false,
rKey
} = Object.assign({}, dOpt, opt);
if (!oKey) return "请填写 oKey";
if (!sKey) return "请填写 sKey";
var g = "";
for (let key in data) {
var item = data[key];
var rItem = rKey ? item[rKey] : [item];
if (item[oKey] === str) {
g = rItem;
}
if (item[sKey] && item[sKey].length > 0) {
var ggItem = this.GetData(item[sKey], str, opt);
if (ggItem) {
g = [rItem, ...ggItem];
}
}
if (g) {
if (last) {
return g.slice(g.length - 1);
}
return g;
}
}
};
}
let d = new Get();
let filterData = d.GetData(obj, "4", {
oKey: "id",
sKey: "list",
// rKey: "id",
last: true
});
console.log(filterData);
------------- 2021-02-26 ------------------------