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

How retrieve json element by key (Javascript)

我想从此 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);

但我收到错误 'undefined'。

如何正确执行此操作?

您可以尝试使用 for...of.

而不是 for...in

演示:

var options;
var expirationSeries;
options = [
    { '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' }
  ]
for (var obj of options)
{
  var k = Object.keys(obj)[0];
  if (k=='2021-05-14') {
    expirationSeries = obj[k];
  };
}
console.log(expirationSeries);

或: 您可以尝试使用 .find()

var options = [
    { '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 temp = options.find(o => Object.keys(o)[0] === '2021-05-14');
var expirationSeries =  temp != undefined ? Object.values(temp)[0] : 'not found';
console.log(expirationSeries);

你也可以试试这个:

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

  if (key == '2021-05-14') {
    expirationSeries = options[key];
  };
});

在数组上使用 for (var key in options) 会将数组的索引分配给 key 变量。

您可以使用 for..of 循环并使用 hasOwnProperty 检查对象的日期是否为 属性。由于您只需要一个匹配项,如果找到匹配项,您可以 break

for (const o of options) {
  if (o.hasOwnProperty('2021-05-14')) {
    expirationSeries = o
    break;
  }
}

这是一个片段:

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"}}],
    expirationSeries;
  
for (const o of options) {
  if (o.hasOwnProperty('2021-05-14')) {
    expirationSeries = o
    break;
  }
}

console.log(expirationSeries)


您可以使用find and hasOwnProperty 来获取具有指定键的对象。如果多个对象可以拥有该键,则使用 filter 获取所有匹配项

const expirationSeries = options.find(a => a.hasOwnProperty('2021-05-21'))
const allMatches = options.filter(a => a.hasOwnProperty('2021-05-21'))

这是一个片段:

const 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"}}],
    expirationSeries = options.find(a => a.hasOwnProperty('2021-05-21')),
    allMatches = options.filter(a => a.hasOwnProperty('2021-05-21'))

console.log(expirationSeries)
console.log(allMatches)

由于 options 是一个数组,您可以使用 find 来获取其中包含 属性 键的第一个对象。

const jsonData = {
  stock: {
    zip: '95014',
    lastUpdated: '05/02/2021'
  },
  options: [
    { '2021-05-07': {} },
    { '2021-05-14': {} },
    { '2021-05-21': {} },
    { '2021-05-28': {} },
    { '2021-06-04': {} },
    { '2021-06-18': {} }
  ]
 }

const key = '2021-05-21';

const result = jsonData.options.find(option => key in option );

console.log(result)

您可以使用 Array.find 在选项数组中查找对象。类似于:

const fromJson = {
  stock: {
    zip: '95014',
    lastUpdated: '05/02/2021'
  },
  options: [
    { '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);

// not found
console.log(findOptionByKey(`2022-03-12`));


function findOptionByKey(key2Find) {
  const keyFinder = obj => obj[key2Find];
  return fromJson.options.find(keyFinder) || `option [${key2Find}] not found`;
}