假设我有这样的物体
resourceMap = {
"a": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
"b": [11, 12],
"c": [21, 23],
"d": [54, 55, 56, 57, 510]
};
找出是否resourceId = 21
可能的最佳方法是"c"
什么?
我们不知道键名或键数。它只匹配一次:含义21
仅属于一个键"c"
。
我正在考虑遍历所有键并进行操作indexOf()
,但是我觉得它不够“优雅”。
我可以使用Underscore,但尽量避免使用Angular或jQuery或仅使用Javascript。
在JavaScript中为对象使用数字属性名称是完全可以接受的。我们可以利用这个优势来构建第二个对象,该对象将所有内容反向映射。这将使查找便宜。
var reverseMap = {};
for(var propName in resourceMap)
{
var numsArr = resourceMap[propName];
numsArr.forEach(function(num){
reverseMap[num]=propName;
});
}
console.log(reverseMap[54]); //'d'
也可以按以下方式更“功能地”(例如,不使用副作用)来构建反向映射:
var reverseMap2 = Object.keys(resourceMap).reduce((acc, propName) =>
resourceMap[propName].reduce((a, num) => {
a[num] = propName;
return a;
}, acc), {});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句