在具有特定属性的字典中查找值

时间:2017-09-23 01:00:24

标签: javascript ecmascript-6 ecmascript-5

说我有一个像

这样的字典
objDict = {
  id1 : { name: 'someObj1', id: 'someId1' },
  id2 : { name: 'someObj2', id: 'someId2' },
  id3 : { name: 'someObj3', id: 'someId3' },
}

如果我想在该词典的值中搜索“id”属性的属性“someId2”,那么在找到它之后我怎么能抓住整个对象呢?

在使用for-in循环迭代字典之外,我真的想不出一个好方法。我正在考虑使用Object.values(),但即便如此,我也想不出使用它来获取包含someId2的整个对象的方法。我只能确定该属性是否存在。

我只是想知道是否有比for-in循环更好的方法。感谢

4 个答案:

答案 0 :(得分:3)

你可以使用Object.keys()获取所有键,然后迭代这些键并根据所需的id选择你想要的对象。



var objDict = {
  id1 : { name: 'someObj1', id: 'someId1' },
  id2 : { name: 'someObj2', id: 'someId2' },
  id3 : { name: 'someObj3', id: 'someId3' },
};
var obj;

Object.keys(objDict).forEach(x => obj = objDict[x].id === 'someId2' ? objDict[x]: obj);

console.log(obj);




答案 1 :(得分:1)

Object.entries(),但for-in循环比其他替代方案更有效。

objDict = { id1 : { name: 'someObj1', id: 'someId1' },
            id2 : { name: 'someObj2', id: 'someId2' },
            id3 : { name: 'someObj3', id: 'someId3' } }

item = Object.entries(objDict).find(a => a[1].id === 'someId2')

console.log(JSON.stringify(item))

答案 2 :(得分:1)

以下包含<style> div { width:50px; height: 60px; background: lightblue; margin: 20px; display: inline-block; } .first { border-top-left-radius: 100% 40px; } .second { border-top-right-radius: 100% 40px; } .third { border-top-right-radius: 100% 40px; border-top-left-radius: 100% 40px; } span { display: inline-block; box-sizing: border-box; width: 100%; border: 1px solid; height: 40px; } </style> </head> <body> <div></div> <div class="first"> <span class="one"></span> </div> <div class="second"> <span class="two"></span> </div> <div class="third"> <span class="three"></span> </div>语句的代码段在统计上可以提供比所选语句更好的性能。

break;

ECMA Script 2015 提供了使用objDict = { id1 : { name: 'someObj1', id: 'someId1' }, id2 : { name: 'someObj2', id: 'someId2' }, id3 : { name: 'someObj3', id: 'someId3' }, }; var obj; for (var key in objDict) { if (objDict[key].id==='someId2') { obj = objDict [key]; break; } } console.log(obj);的另一种选择,如:How to iterate (keys, values) in javascript?

中所述

希望这可能会有所帮助。

答案 3 :(得分:0)

这是一个通用的索引问题,所以不,除了循环遍历字典中的每个值之外,没有其他方法可以做到这一点。这是因为您已经创建了一个数据结构来快速访问数据(O(1)时间),但缺点是如果您想快速通过另一个索引查找数据,则必须手动搜索O(n)时间到了。

如果你真的关心someId的实际值,那么规范的答案就是创建2个单独的词典,这些词典具有相同的数据和不同的键值。这与数据库表上有2个索引非常相似。