使用javascript映射键/值
Mapping key/value with javascript
有没有映射键和值的方法在使用Javascript的数组中?在我看来,它类似于jQuery .map()
,但不是只映射值,而是"映射"键。
假设我有以下数组:
var names = [ 1, 2, 3, 4, 5 ];
我喜欢使用一个名为numberToName()
的函数,我创建了这个函数并由此生成了另一个数组,结果应该是这样的:
var names = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 };
目前我使用以下方法:
var names = [ 1, 2, 3, 4, 5 ],
names_tmp = {},
names_i = 0,
names_len = names.length;
for(; names_i < names_len; names_i++) {
names_tmp[numberToName(names[names_i])] = names[names_i];
}
问题是:有什么方法(最好是本地的)可以改进这种方法吗?我甚至可以毫无问题地使用jQuery。也许有一个类似的功能:
var names = jQuery.mapKeys([ 1, 2, 3, 4, 5], function(k, v) {
return { key: numberToName(v), value: v };
});
您正在寻找reduce
:
var names = [1, 2, 3, 4, 5].reduce(function(obj, k) {
return obj[numberToName(k)] = k, obj;
}, {});
return obj[numberToName(k)] = k, obj
是编写赋值+返回的一种简写方式(当然可读性较差):
obj[numberToName(k)] = k;
return obj;
一个简单的forEach
也可以完成这项工作:
names = {};
[1, 2, 3, 4, 5].forEach(function(k) {
names[numberToName(k)] = k
})
如果您愿意,也可以使用jquery的$.each
。
当然是,(截至IE9):
var nums={};
[ 1, 2, 3, 4, 5].forEach(function(v, i) {
this[numberToName(v)]=v;
}, nums);
nums;
编辑:添加了一个索引,使其更容易判断发生了什么。
EDIT:通过使用forEach使其变得完美,尽管它没有$'s.map()那么接近,但运行速度确实比[].map快3%。(感谢thg435的提示!)
相关文章:
- 在javascript中按映射中的值排序
- 使用带有两个参数的函数的javascript映射
- 使用Google Maps JavaScript API v3和Geocoding API映射多个位置
- 用javascript映射和匹配范围
- 如何在javascript中实现映射或排序集
- google在类内映射javascript directionsService.route请求:将类实例传递给回调函数
- 使用源映射在Visual Studio中调试缩小的JavaScript
- Javascript映射对象成员以返回新的扁平对象
- Ember.js+传单+rails(使用Javascript MVC创建rails应用程序并打开源代码映射)
- javascript对象2对象映射器
- 使用javascript在数组中迭代和映射JSON
- Javascript类链接映射库
- HERE 映射 javascript API - 抛出“指针必须有 ID”错误
- 图像映射JavaScript在单击时输入字段中的Toogle值
- api中的InfoWindow谷歌映射javascript v3
- 这里映射JavaScript API 3.0浏览器如何设置标记颜色
- 映射javascript键与动态变量
- 切片和映射javascript数组上的多个项目
- 动态变化的谷歌用变量映射javascript api
- 这里映射JavaScript API缩放到边界框的错误