假设您有一个复杂的深度嵌套的对象,具有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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句