我有一个函数,其中来自多维数组的多个值经常被调用,如array[idx][3]
..为了节省空间,我想在函数的开头用这些值定义变量,如下所示: / p>
var na = array[idx][1];
var sc = array[idx][2];
...
我认为如果可以创建一个变量名称数组会更快 - > var tmp = ['na','sc',...];
,创建一个for循环并循环遍历名称数组和多维array
,即:
for(i = 0; i = 7, i++){
var tmp[i] = array[idx][i];
}
有可能吗?
答案 0 :(得分:1)
您可以使用array
存储密钥。
然后使用Object
创建密钥 - >价值映射。
然后使用obj.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);