javascript - 获取对象中最后一个最深级别的项目

标签 javascript lodash

我有这样的数据和函数:

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/

相关文章:

javascript - 使用 regExp 不区分大小写的单词边界

javascript - 无法访问 jquery 之外的 var

javascript - 仅使用 javascript 或 jquery 列出带括号的列表?

javascript - 在 POST 正文中发送一个数组

javascript - css 选择器问题,如何在子 ul 聚焦时更改父 li 的字体颜色

javascript - Vue.js 数据对象无法与某些 lodash 函数一起使用?

lodash - 根据不同键的值排序?

javascript - 通过值为数组的键组合两个对象

functional-programming - 如何使用Lodash Flow了解 curry 和功能成分?

javascript - Lodash - 将对象移动到数组中的第一位而不是按另一个属性排序