Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript映射键/值_Javascript_Jquery_Arrays_Map - Fatal编程技术网

使用javascript映射键/值

使用javascript映射键/值,javascript,jquery,arrays,map,Javascript,Jquery,Arrays,Map,有没有办法映射键和值​​在使用Javascript的数组中?在我看来,它类似于jQuery,但它不仅映射值,还“映射”键 假设我有以下数组: var names = [ 1, 2, 3, 4, 5 ]; 我喜欢使用一个名为numberToName()的函数,我创建了这个函数并从中生成了另一个数组,结果应该是这样的: var names = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 }; 目前我使用以下方法: var name

有没有办法映射键和值​​在使用Javascript的数组中?在我看来,它类似于jQuery,但它不仅映射值,还“映射”键

假设我有以下数组:

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];
}
当然是,(从IE9开始):

编辑:添加了一个索引,以便更容易地知道发生了什么


编辑:通过使用forEach使其变得完美,尽管它没有接近$的.map(),但它的运行速度比[].map快约3%。(感谢thg435的提示!)

您正在寻找
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的
$。如果您愿意,每个
都可以用相同的方式使用。

嗯,不,他不是。这是bass ackwards假装reduce是map或foreach的一种方式…@dandavis:我看到你理解了这个问题并编辑了你的帖子。我认为这里的
forEach
map
好(如果你出于某种原因不喜欢reduce)。杀死闭包,我将删除我的答案。@dandavis:让OP来决定。我认为.reduce()对我更有效,因为我需要将值作为数组直接返回给var。forEach不会这样做。对吗?
     obj[numberToName(k)] = k;
     return obj;
names = {};
[1, 2, 3, 4, 5].forEach(function(k) {
   names[numberToName(k)] = k
})