javascript - 从 Javascript 对象获取所有最后一个值

标签 javascript json

我的问题是,从 javascript 对象获取所有最后值的最佳方法是什么。 示例:给定任何对象(必须接受任何对象),但举个例子:

const obj = {
  "id": 1,
  "name": "Leanne Graham",
  "address": {
    "street": "Kulas Light",
    "geo": {
      "lat": "-37.3159",
    }
  }
}

并有一个函数来获取所有最后的值:

console.log( getAllLastValues(obj) );

预期结果是:

{
    "id": 1,
    "name": "Leanne Graham",
    "street": "Kulas Light",
    "lat": "-37.3159"
}

最佳答案

您可以使用递归函数来实现此目的,该函数使用reduce()

const obj = {
  "id": 1,
  "name": "Leanne Graham",
  "address": {
    "street": function() {
      return 'Function works'
    },
    "geo": {
      "lat": "-37.3159",
    }
  }
}

function getLast(data) {
  return Object.keys(data).reduce(function(r, e) {
    if (typeof data[e] == 'object' && data[e] !== "function") Object.assign(r, getLast(data[e]))
    else if (typeof data[e] === "function") r[e] = data[e]()
    else r[e] = data[e]
    return r;
  }, {})
}

console.log(getLast(obj))

更新:更复杂的数据结构。

const obj = {
  "id": 1,
  "name": "Leanne Graham",
  "address": {
    "street": function() {
      return {
        lorem: 'ipsum',
        another: function() {
          return 'one'
        },
        test: 'Test'
      }
    },
    "geo": {
      "lat": "-37.3159",
    }
  }
}

function getLast(data) {
  return Object.keys(data).reduce(function(r, e) {
    if (typeof data[e] == 'object' && data[e] !== "function") {
      Object.assign(r, getLast(data[e]))
    } else if (typeof data[e] === "function") {
      if (typeof data[e]() === 'object') Object.assign(r, getLast(data[e]()))
      else r[e] = data[e]()
    } else {
      r[e] = data[e]
    }
    return r;
  }, {})
}

console.log(JSON.stringify(getLast(obj), 0, 4))

关于javascript - 从 Javascript 对象获取所有最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421634/

相关文章:

JSON Schema - 根据另一个字段的值指定字段

json - 从 json 解码后无法调用方法

javascript - 如何在ajax url中传递多个数组值

javascript - 检索 parse.com 数据并显示在数据表中

java - 延迟加载内容

javascript - 使用 jQuery 创建自定义 JSON 对象

javascript - Nodejs json 字符串显示为 [object Object]

javascript - 如何从子网格功能区 Xml 中引用 JavaScript 库

javascript - 在 Javascript 中合并对象以实现无限加载 Ajax 插件

JavaScript/JQuery 在 HTML 中查找图像链接并转换为实际图像