如何按键检索json元素(Javascript)

如何按键检索json元素(Javascript),javascript,json,key-value,Javascript,Json,Key Value,我想从这个json对象中检索键为“2021-05-14”的选项 { stock: { zip: '95014', lastUpdated: '05/02/2021' }, options: [ { '2021-05-07': [Object] }, { '2021-05-14': [Object] }, { '2021-05-21': [Object] }, { '2021-05-28': [Object] }, { '2021

我想从这个json对象中检索键为“2021-05-14”的选项

{
  stock: {
    zip: '95014',
    lastUpdated: '05/02/2021'
  },
  options: [
    { '2021-05-07': [Object] },
    { '2021-05-14': [Object] },
    { '2021-05-21': [Object] },
    { '2021-05-28': [Object] },
    { '2021-06-04': [Object] },
    { '2021-06-18': [Object] }
  ]
}
我试过:

var options;
var expirationSeries;
options = res.body.options;  // res.body is the json-object
for (var key in options)
{
  if (key=='2021-05-14') {
    expirationSeries = options[key];
  };
}
console.log(expirationSeries);
但我得到了错误“未定义”


如何正确执行此操作?

您可以尝试使用
for…of
来代替
中的

演示:

var选项;
var到期系列;
选项=[
{'2021-05-07':'data 1'},
{'2021-05-14':'data 2'},
{'2021-05-21':'data 3'},
{'2021-05-28':'data 4'},
{'2021-06-04':'data 5'},
{'2021-06-18':'data 6'}
]
对于(期权的var obj)
{
var k=Object.keys(obj)[0];
如果(k=='2021-05-14'){
expirationSeries=obj[k];
};
}

console.log(expirationSeries)您也可以尝试以下方法:

options.forEach(obj => {
  const key = Object.keys(obj)[0];

  if (key == '2021-05-14') {
    expirationSeries = options[key];
  };
});
在数组上使用
for(var键入选项)
将数组的索引分配给
key
变量

您可以使用循环并使用
hasOwnProperty
检查对象是否将该日期作为属性。因为您只需要一个匹配项,所以如果找到匹配项,您可以
中断

for(选项常量){
如果(o.hasOwnProperty('2021-05-14')){
expirationSeries=o
打破
}
}
下面是一个片段:

let options=[{“2021-05-07”:{foo:bar},{“2021-05-14”:{foo:bar},{“2021-05-21”:{foo:bar},{“2021-05-28”:{“foo:bar},{”2021-06-04:{foo:bar},{“2021-06-18”:{foo:bar},{,
过期系列;
用于(选项常量){
如果(o.hasOwnProperty('2021-05-14')){
expirationSeries=o
打破
}
}

log(expirationSeries)
因为options是一个数组,您可以使用find获取第一个包含属性键的对象

const jsonData={
股票:{
zip:'95014',
最新更新:“2021年2月5日”
},
选项:[
{ '2021-05-07': {} },
{ '2021-05-14': {} },
{ '2021-05-21': {} },
{ '2021-05-28': {} },
{ '2021-06-04': {} },
{ '2021-06-18': {} }
]
}
常数键='2021-05-21';
const result=jsonData.options.find(option=>key-in-option);
console.log(result)
可用于在选项数组中查找对象。比如:

const fromJson={
股票:{
zip:'95014',
最新更新:“2021年2月5日”
},
选项:[
{ '2021-05-07': {} },
{ '2021-05-14': {} },
{ '2021-05-21': {} },
{ '2021-05-28': {} },
{ '2021-06-04': {} },
{ '2021-06-18': {} },
]
}
const expirationSeries=findOptionByKey(`2021-05-14`);
console.log(expirationSeries);
//找不到
console.log(findOptionByKey(`2022-03-12`));
函数findOptionByKey(key2Find){
常量keyFinder=obj=>obj[key2Find];
从json.options.find(keyFinder)返回| | `未找到选项[${key2Find}];

}
您是否调试了代码或添加了
console.log(key)
以查看返回的内容?您需要在数组中循环并检查每个对象是否有键
'2021-05-14'
似乎您的JSON选项是JSON对象的数组,所以键是一个数字,而不是您上面提到的日期。这可以通过多种方式完成,但可能只需稍微更改代码,就更简单了。如果
options
集合的顺序不重要,可以将其转换为对象而不是数组,只需使用
options{'2021-05-07':[object]、'2021-05-14':[object]、'2021-05-21':[object]}
,只需使用
options['2021-05-14']即可实现所需操作
使用
console.log
查看您得到了什么。请注意,
for(vark in[“first”,“second”]){
将给出
0,1
,因此我认为您会发现键是一个数字。