javascript - 修改一个复杂的深度嵌套的 javascript 对象

标签 javascript json object jsonpath

假设您有一个复杂的深层嵌套对象,有 15 到 20 层,您想要根据字段查询其中的某个节点并修改特定属性。我们怎样才能实现它?

下面的例子是人为设计的,对象不像我的情况那么复杂,也没有那么深,所以请不要建议类似 obj[phoneNumbers][0].number = somethingNew

我在下面的示例中使用名为 jsonpath 的库来查询特定节点并使用 jsonpath 表达式获取其值。

var jp = require("jsonpath");

const obj = {
  firstName: "John",
  lastName: "doe",
  age: 26,
  address: {
    streetAddress: "naist street",
    city: "Nara",
    postalCode: "630-0192"
  },
  phoneNumbers: [
    {
      type: "iPhone",
      number: "0123-4567-8888"
    },
    {
      type: "home",
      number: "0123-4567-8910"
    }
  ]
};

const number = jp.query(obj, "$.phoneNumbers[0].number");
console.log(number);

// outputs: [ '0123-4567-8888' ]

谢谢。

最佳答案

如果您可以使用 lodash (npm i --save lodash) ( https://lodash.com/ ),那么获取或设置深度嵌套的值将非常容易。

获取深度嵌套的值:( https://lodash.com/docs#get )

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'

设置深度嵌套值:( https://lodash.com/docs#set )

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.set(object, 'a[0].b.c', 4);
console.log(object.a[0].b.c);
// => 4

_.set(object, ['x', '0', 'y', 'z'], 5);
console.log(object.x[0].y.z);
// => 5

关于javascript - 修改一个复杂的深度嵌套的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56142510/

相关文章:

jquery.ajax() 使用来自 mysql 的 json 数据

javascript - 如果比预期快,是否正在等待图像加载和延迟?

javascript - 如何比较数组中的每个元素并将具有相同数据的元素分组(在我的例子中是日期)? JavaScript

javascript - 无效的 JSON 原语 - Asp.Net MVC 4

java - 现场级反序列化不适用于 jackson

Scala 委托(delegate)导入隐式转换

java - 在 Java 中打印对象值

javascript - 如何合并并获取两个对象与对象具有相同键的值之和

javascript - "this"在这个揭示模块模式中意味着什么

javascript - 与其他用户共享 IndexedDB 存储