声明增量的Javascript变量

问题描述 投票:-1回答:1

我想声明一组固定的变量作为一个大数组的索引,例如:var age = 1, height = 2, weight = 3, name = 4, address = 5, education = 6。

我很清楚,如果我使用一个对象来存储这些数据,我将不必声明每个索引,但假设几分钟后,我需要使用一个数组来存储数据。

我的问题是,在许多情况下,我有这样的索引列表,长度超过30或40,我经常想在列表中间插入一个新的索引,我必须编辑列表,并缓慢地将每个现有的定义值递增一个(如果我一次插入多个新索引,则递增更多)。

我怎样才能干净利落地声明和初始化这组变量以避免这个问题。

我是否可以定义一个对象来包含它们全部,并将该对象传递给一个初始化函数,为每个变量分配起始值?

如果我后来想对代码进行最小化,用实际的值来代替变量怎么办。

javascript
1个回答
0
投票

你可以用typescript的方式.在typescript中。

enum Person {
 age = 1,
 height,
 weight
}

相当于

var Person;

(function (Person) {
  Person[Person["age"] = 1] = "age";
  Person[Person["height"] = 2] = "height";
  Person[Person["weight"] = 3] = "weight";
})(Person || (Person = {}));

下面给出了使用es6语法的大致实现。一个util类Enum。

使用Proxy。

class Enum {
  constructor(args, startIndex = 0, defaultValue) {
    const em = args.split("|").reduce((m, key, index) => {
      m[(m[key] = index + startIndex)] = key;
      return m;
    }, {});
    em.value = em.key = (k) => em[k];
    return new Proxy(em, {
      get: (obj, prop) => (prop in obj ? obj[prop] : defaultValue),
    });
  }
}
const Person = new Enum("AGE|HEIGHT|WEIGHT", 2, -1);
console.log(Person); // { '2': 'AGE', '3': 'HEIGHT', '4': 'WEIGHT', AGE: 2, HEIGHT: 3, WEIGHT: 4 }

// How to use it:
let { AGE, HEIGHT, X } = Person;
console.log(AGE, HEIGHT, X); // 2, 3, -1

// To get key
if ("HEIGHT" === Person.key(3)) {
  console.log("You are right!"); // You are right
}

// To get value
if (2 === Person.value("AGE")) {
  console.log("You are right, Again!"); // You are right
}

使用基本Javascript。

const enumVars = (args, startIndex = 1) => {
  return args.split("|").reduce((m, key, index) => {
    m[(m[key] = index + startIndex)] = key;
    return m;
  }, {});
};
const Person = enumVars("AGE|HEIGHT|WEIGHT", 2);
console.log(Person); // { '2': 'AGE', '3': 'HEIGHT', '4': 'WEIGHT', AGE: 2, HEIGHT: 3, WEIGHT: 4 }

// How to use it:
let { AGE, HEIGHT } = Person;
console.log(AGE, HEIGHT); // 2, 3

// To get key

if ("HEIGHT" === Person[3]) {
  console.log("You are right!");
}
© www.soinside.com 2019 - 2024. All rights reserved.