从对象数组中提取值
Extract value from array of objects
所以我有这个对象数组:
[ { type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' } ]
我需要一种使用搜索词 month
提取值 9
的方法。
当然我可以使用:
var myObjects = [
{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }
] ;
console.log(myObjects[0]["value"]);
问题是,这确实没有使用搜索词,而且我处于日期格式可以从 en_GB
更改为 en_US
和其他复杂时间格式的情况下month
开关位置为 [1]
、[2]
或 [3]
.
使用Array#find
:
const data = [ { type: 'month', value: '9' }, { type: 'day', value: '11' }, { type: 'year', value: '2021' }, { type: 'hour', value: '7' }, { type: 'minute', value: '35' }, { type: 'second', value: '07' } ];
const { value } = data.find(({ type }) => type === 'month') || {};
console.log(value);
还有一个变体:
var arr = [{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }];
// var month = arr.filter(x => x.type == 'month')[0].value; // less efficient
var month = arr.find(x => x.type == 'month').value; // more efficient
console.log(month) // 9
并且可能将对象数组转换为单个对象会很方便。可以这样做:
var arr = [
{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021'},
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }
]
const arr_to_obj = arr => {
var obj = {};
for (var a of arr) obj[a.type] = a.value;
return obj;
}
var date = arr_to_obj(arr); // { month:9, day:11, year:2021, ... }
console.log(date.month); // 9
console.log(date.day); // 11
console.log(date.year); // 2021
console.log(date.hour); // 7 ...etc
所以我有这个对象数组:
[ { type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' } ]
我需要一种使用搜索词 month
提取值 9
的方法。
当然我可以使用:
var myObjects = [
{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }
] ;
console.log(myObjects[0]["value"]);
问题是,这确实没有使用搜索词,而且我处于日期格式可以从 en_GB
更改为 en_US
和其他复杂时间格式的情况下month
开关位置为 [1]
、[2]
或 [3]
.
使用Array#find
:
const data = [ { type: 'month', value: '9' }, { type: 'day', value: '11' }, { type: 'year', value: '2021' }, { type: 'hour', value: '7' }, { type: 'minute', value: '35' }, { type: 'second', value: '07' } ];
const { value } = data.find(({ type }) => type === 'month') || {};
console.log(value);
还有一个变体:
var arr = [{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021' },
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }];
// var month = arr.filter(x => x.type == 'month')[0].value; // less efficient
var month = arr.find(x => x.type == 'month').value; // more efficient
console.log(month) // 9
并且可能将对象数组转换为单个对象会很方便。可以这样做:
var arr = [
{ type: 'month', value: '9' },
{ type: 'day', value: '11' },
{ type: 'year', value: '2021'},
{ type: 'hour', value: '7' },
{ type: 'minute', value: '35' },
{ type: 'second', value: '07' }
]
const arr_to_obj = arr => {
var obj = {};
for (var a of arr) obj[a.type] = a.value;
return obj;
}
var date = arr_to_obj(arr); // { month:9, day:11, year:2021, ... }
console.log(date.month); // 9
console.log(date.day); // 11
console.log(date.year); // 2021
console.log(date.hour); // 7 ...etc