如何从JavaScript对象数组中按指定type属性搜索提取对应value值
解决方案
你可以使用数组内置的find方法匹配符合条件的对象,无需依赖固定索引,适配数组元素顺序变动的场景:
ES6+ 最简实现
const 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' } ]; const searchKey = 'month'; // 匹配第一个type等于搜索词的对象 const matchedItem = myObjects.find(item => item.type === searchKey); // 兼容未匹配到的场景,避免报错 const result = matchedItem ? matchedItem.value : null; console.log(result); // 输出:9
ES5 兼容实现
如果需要支持旧浏览器环境,可以用普通for循环实现:
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' } ]; var searchKey = 'month'; var result = null; for (var i = 0; i < myObjects.length; i++) { if (myObjects[i].type === searchKey) { result = myObjects[i].value; break; // 匹配到后直接跳出循环,减少性能消耗 } } console.log(result); // 输出:9
高频查询优化方案
如果需要频繁查询不同type对应的值,可以提前把数组转为映射对象,后续查询时间复杂度为O(1):
const dateMap = myObjects.reduce(function(prev, curr) { prev[curr.type] = curr.value; return prev; }, {}); // 直接通过key取值 console.log(dateMap.month); // 9 console.log(dateMap.year); // 2021
内容的提问来源于stack exchange,提问作者Verminous
相关产品推荐
相关产品推荐

