Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:如果沿嵌套字典路径为null,则返回默认值_Javascript - Fatal编程技术网

Javascript JS:如果沿嵌套字典路径为null,则返回默认值

Javascript JS:如果沿嵌套字典路径为null,则返回默认值,javascript,Javascript,我有一个高度嵌套的JSON结构,在这里我可以像这样提取单个信息 let result = data["a"]["b"][0]["c"]["d"][0]["e"][0] 提取数据的优雅方式是什么?此外,当a、b、c、d、e中的任何一个都不存在或数组不包含元素0时,是否可以将结果分配给null或undefined let result=data?.a?.b?[0]?.c?.d?[0]?.e?[0]

我有一个高度嵌套的JSON结构,在这里我可以像这样提取单个信息

let result = data["a"]["b"][0]["c"]["d"][0]["e"][0]

提取数据的优雅方式是什么?此外,当a、b、c、d、e中的任何一个都不存在或数组不包含元素0时,是否可以将结果分配给
null
undefined

let result=data?.a?.b?[0]?.c?.d?[0]?.e?[0]

我想说最简单的选择是一个可选的链式操作符或其他东西,但我相信正确的方法是这样的

可能还有其他库(如one或)允许您执行相同的操作

JSONPath是JSON的XPath

JSON示例:

{ "store": {
    "book": [ 
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
这就是如何使用JSONPath表达式获取商店中所有书籍的作者:

$.store.book[*].author
您可以在JavaScript中使用它:

const o = { /*...*/ },  // the 'store' JSON object from above
res1 = jsonPath(o, "$..author").toJSONString(); // all authors JSONPath expression
res2 = jsonPath(o, "$..author", {resultType:"PATH"}).toJSONString();

您可以编写一个函数
path
,用于获取要访问的属性数组和要读取的对象:

  • 该函数是curry函数,因此您可以构建一个访问特定路径的函数,并将其与不同的对象重用
  • reduce向下钻取对象,直到
    未定义
    或到达路径末端
constpath=p=>o=>
p、 减少((分辨率,pp)=>
res==未定义?res:res[pp]
,o
);
const abcd=path(['a','b','c','d']);
log(abcd({}));
log(abcd({a:1}));
log(abcd({a:{b:{}));

log(abcd({a:{b:{c:{d:42}))
我最喜欢的解决方案是使用链接问题中的
\u try
函数进行如此长的导航,直到可选的链接操作符在所有应用程序中都得到支持targets@CristianTraìna这不再是必要的,因为它现在在ECMA标准中,并且通过Transfilation(使用webpack)支持对于较旧的目标或直接在JS引擎中(节点和浏览器)。@zmo我同意,但不是每个人都在使用Babel:)有些人仍然为浏览器编写JavaScript。顺便说一句,链接问题还包含可选链接运算符的引用。我并不反对将问题作为重复问题结束,我实际上只是添加了我的投票。虽然我认为可选链接应该优先于
\u try
功能,因为现在主要浏览器都支持它,但它是标准的,为了向后兼容,有babel。