如何在JavaScript中实现类似LINQ功能从数组返回指定对象
在JavaScript中通过Id查找对象并获取Title
问题描述
我有如下JavaScript对象数组:
var PriorityList =[] PriorityList.push({ Id: 4, Title: 'Very High' }); PriorityList.push({ Id: 3, Title: 'High' }); PriorityList.push({ Id: 2, Title: 'Normal' }); PriorityList.push({ Id: 1, Title: 'low' }); PriorityList.push({ Id: 1, Title: 'Very low' });
我希望通过Id找到其中一个对象并返回它的Title。在C#中我可以运行以下代码:
var selPer = PriorityList.Find(2).Title;
或者
var selPer = PriorityList.First(p=>p.Id==2).Title;
但我不知道在JavaScript中该如何实现?
解决方法
方法1:使用Array.find()(ES6及以上版本)
这和C#的First()逻辑最接近,返回第一个匹配条件的元素:
// 查找Id为2的第一个对象,然后获取Title var selPer = PriorityList.find(item => item.Id === 2).Title; console.log(selPer); // 输出: Normal
如果不确定数组中一定存在匹配项,建议先判断是否找到对象,避免报错:
var targetItem = PriorityList.find(item => item.Id === 2); var selPer = targetItem ? targetItem.Title : '未找到匹配项';
方法2:处理多个匹配项(比如Id=1有两个对象)
如果需要获取所有匹配Id的Title,可以用Array.filter()结合map():
// 获取所有Id为1的对象的Title数组 var titles = PriorityList.filter(item => item.Id === 1).map(item => item.Title); console.log(titles); // 输出: ['low', 'Very low']
方法3:兼容旧版JavaScript(不支持ES6的环境)
如果要兼容ES6之前的环境,可以用普通循环遍历:
function getTitleById(list, targetId) { for (var i = 0; i < list.length; i++) { if (list[i].Id === targetId) { return list[i].Title; } } return '未找到匹配项'; } var selPer = getTitleById(PriorityList, 2); console.log(selPer); // 输出: Normal
内容的提问来源于stack exchange,提问作者Hosein Ghasemi
相关产品推荐
相关产品推荐

