说我有一个像
这样的字典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循环更好的方法。感谢
答案 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个索引非常相似。