jQuery/Javascript 索引成 collection/map by object 属性
jQuery/Javascript index into collection/map by object property?
我有以下Javascript定义了一组国家及其州...
var countryStateMap = [{"CountryCode":"CA","Name":"Canada","States":[{"StateCode":"S!","CountryCode":"CA","Name":"State 1"},{"StateCode":"S2","CountryCode":"CA","Name":"State 2"}]},"CountryCode":"US","Name":"United States","States":[{"StateCode":"S1","CountryCode":"US","Name":"State 1"}]}];
根据用户选择的国家/地区,我需要从所选国家/地区对象中刷新选择框的州选项。我知道我可以用这样的 int 索引索引到国家集合中......
countryStateMap[0].States
不过,我需要一种方法来获取按国家/地区代码属性。我知道以下内容不起作用,但我想做的是这样的事情......
countryStateMap[CountryCode='CA'].States
这是否可以在不完全重建我的收藏结构或每次迭代集合以找到我想要的集合的情况下实现?
更新:我接受了mVChr的答案,因为它有效并且是最简单的解决方案,即使它需要第二张地图。
我们实际上最终采用的解决方案只是使用国家/地区选择框的索引来索引到集合中。这之所以有效,是因为我们的国家/地区下拉列表也是从我们的数据结构中填充的。以下是我们如何索引...
countryStateMap[$('#country').attr("selectedIndex")]
如果您需要任何其他方式,请使用以下任何解决方案。
您可以做的一件事是缓存映射,因此您只需执行一次迭代:
var csmMap = {};
for (var i = 0, cl = countryStateMap.length; i < cl; i++) {
csmMap[countryStateMap[i].CountryCode] = i;
}
然后,如果countryCode = 'CA'
,您可以找到其状态,例如:
countryStateMap[csmMap[countryCode]].States
countryStateMap.get = function(cc) {
if (countryStateMap.get._cache[cc] === void 0) {
for (var i = 0, ii = countryStateMap.length; i < ii; i++) {
if (countryStateMap[i].CountryCode === cc) {
countryStateMap.get._cache[cc] = countryStateMap[i];
break;
}
}
}
return countryStateMap.get._cache[cc];
}
countryStateMap.get._cache = {};
现在你可以这样称呼.get("CA")
countryStateMap.get("CA").States
如果你更喜欢合成糖,你可能会对下划线感兴趣,它有实用的方法,使这种代码更容易编写
countryStateMap.get = _.memoize(function(cc) {
return _.filter(countryStateMap, function(val) {
val.CountryCode = cc;
})[0];
});
_.memoize
, _.filter
喜欢你的本地jQuery:
适合您的小功能:
getByCountryCode = function(code){var res={};$.each(countryStateMap, function(i,o){if(o.CountryCode==code)res=o;return false;});返回 res}
所以这样做吧:
getByCountryCode("CA").国家
它返回:
[对象,对象]
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 有没有一种方法可以列出Ember.Object的所有绑定
- 如何取消object.prototypes javascript的一个函数
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- 将*.js文件的内容放入Object中
- Object.prototype using 'this'
- 使用Object.create()的角度服务继承
- 如何使用object.assign()从其他对象引用基本对象属性
- 循环的数组推入在Object容器中具有不同的值
- reducers在redux中得到Function not Object,what'it’他错了
- JSON.stringify和Object.keys在同一个对象上产生不同的结果
- 在使用object.create创建的对象中使用super
- Join架构验证:Join.object定义数组中的有效键
- jquery打印[object XMLDocument]而不是文件内容
- ExtJS 4 Object.prototype fail
- JQuery .sort() JavaScript Object by property value不起作用
- Javascript: Jquery Select-Object-by-Attribute-Value doen'
- 在Titanium中选择Object by Id
- jQuery/Javascript 索引成 collection/map by object 属性