Javascript 使用数组中的名称定义变量

标签 javascript arrays loops variables multidimensional-array

我有一个函数,其中经常调用多维数组中的多个值,例如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];

}

可能吗?

最佳答案

  1. 您可以使用array存储 key 。

  2. 然后使用Object创建键->值映射。

  3. 然后使用 obj.key (如果 key 已固定)或 obj[key] (如果键是计算值)顶部获取值。

  4. 在你的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);

jsfiddle

结合你的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/

相关文章:

javascript - Webpack 路径参数不是字符串

javascript - window.location 是非阻塞操作吗?

php - 从 PHP 发布的表单中清理和构建查询的更快方法

arrays - 在 clo j ure 中拆分 String 然后打印

javascript - 如果包含键值对,则返回数组中的对象

javascript - Node.js 路径无限循环

javascript - 如何按指定元素对数组数组进行排序?

javascript - webpack 4 - webpack-dev-server 未创建文件

java - 如何访问 getPixel 中的数组?

javascript - for (x in y) VS for (i = 0; i < y.length; i++) 其中 x 是对象数组