我有一个函数,其中经常调用多维数组中的多个值,例如array[idx][3]
。为了节省空间,我想用这些值定义变量函数的开头如下所示:
var na = array[idx][1];
var sc = array[idx][2];
...
我认为如果可以创建变量名数组会更快 -> var tmp = ['na','sc',...];
,创建一个 for循环遍历名称数组和多维数组,即:
for(i = 0; i = 7, i++){
var tmp[i] = array[idx][i];
}
可能吗?
最佳答案
您可以使用
array
存储 key 。然后使用
Object
创建键->值映射。然后使用
obj.key
(如果 key 已固定)或obj[key]
(如果键是计算值)顶部获取值。在你的jsfiddle
for (i = 0; i = 7; i++) {
将会挂起浏览器,您应该使用i < 7
而不是i = 7
.
var keys = ['na', 'sc', 'kd', 'wi', 'ki', 'de', 'sh', 'ti'];
var values = {};
var i, key, len;
// Prevent using magic number 7, get the length from the keys.
for (i = 0, len = keys.length; i < len; i++) {
values[keys[i]] = i;
}
alert(values.na);
可以进一步缩短工作Array.prototype.forEach :
// Create map store.
var v = {};
// Loop through the array
['na', 'sc', 'kd', 'wi', 'ki', 'de', 'sh', 'ti'].forEach(function(key, idx) {
v[key] = idx;
});
alert(v.na);
结合你的idx可能是动态的,你可以创建一个函数,给出idx
和目标数组,返回带有键的对象。
// A list to simulate what you mentioned with array[idx][i].
var demoList = [
['na - 0', 'sc - 0', 'kd - 0', 'wi - 0', 'ki - 0', 'de - 0', 'sh - 0', 'ti - 0'],
['na - 1', 'sc - 1', 'kd - 1', 'wi - 1', 'ki - 1', 'de - 1', 'sh - 1', 'ti - 1'],
['na - 2', 'sc - 2', 'kd - 2', 'wi - 2', 'ki - 2', 'de - 2', 'sh - 2', 'ti - 2'],
['na - 3', 'sc - 3', 'kd - 3', 'wi - 3', 'ki - 3', 'de - 3', 'sh - 3', 'ti - 3'],
['na - 4', 'sc - 4', 'kd - 4', 'wi - 4', 'ki - 4', 'de - 4', 'sh - 4', 'ti - 4'],
['na - 5', 'sc - 5', 'kd - 5', 'wi - 5', 'ki - 5', 'de - 5', 'sh - 5', 'ti - 5'],
['na - 6', 'sc - 6', 'kd - 6', 'wi - 6', 'ki - 6', 'de - 6', 'sh - 6', 'ti - 6'],
['na - 7', 'sc - 7', 'kd - 7', 'wi - 7', 'ki - 7', 'de - 7', 'sh - 7', 'ti - 7']
];
var getResult = function(idx, array) {
var v = {};
// Only create the mapping if input array and array[idx] are both array.
if (Array.isArray(array) && Array.isArray(array[idx])) {
['na', 'sc', 'kd', 'wi', 'ki', 'de', 'sh', 'ti'].forEach(function(key, i) {
v[key] = array[idx][i];
});
}
return v;
};
var v = getResult(1, demoList);
alert(v.na);
关于Javascript 使用数组中的名称定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881796/