如何按键检索 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`;
}
我想从此 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`;
}