我有这样的数据和函数:
const lodash = require('lodash')
var data = [
{
"nextStep": [
{
"nextStep": [
{
"nextStep": [
{
"nextStep": [],
"student": {
"name": "Alice",
"grade": 1
}
}
],
"student": {
"name": "Lisa",
"grade": 2
}
}
],
"student": {
"grade": 3,
"name": "This is GS"
}
}
],
"student": {
"grade": 4,
"name": "Paul"
}
}
]
function searchByJsonPath(path, obj, target) {
for (var k in obj) {
if (obj.hasOwnProperty(k))
if (k === target)
return path;
else if (typeof obj[k] === "object") {
var result = searchByJsonPath(path + "." + k, obj[k], target);
if (result)
return result;
}
}
return false;
}
我想获取对象中的最后一项,结果应该是
"name": "Alice",
"grade": 1
因此,我调用 searchByJsonPath
来获取路径并使用 lodash 来获取项目
test = searchByJsonPath('data', data, 'name');
但是test = data.0.nextStep.0.nextStep.0.nextStep.0.student
正确的路径应该是data[0].nextStep[0].nextStep[0].nextStep[0].student
请给我建议。
最佳答案
您可以尝试像下面这样的递归
来获取最深的元素
var data = [{ "nextStep": [ { "nextStep": [ { "nextStep": [ { "nextStep": [], "student": { "name": "Alice", "grade": 1 } } ], "student": { "name": "Lisa", "grade": 2 } } ], "student": { "grade": 3, "name": "This is GS" } } ], "student": { "grade": 4, "name": "Paul" }}]
function getData(obj) {
return obj.nextStep.length > 0
? getData(obj.nextStep[0])
: obj.student
}
console.log(getData(data[0]))
关于javascript - 获取对象中最后一个最深级别的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410761/