JavaScript 中如何将变量转换为字符串?

How do you turn a variable into a string in JavaScript?

我一直在搜索,在大多数论坛中,对这个问题的回复或多或少都是不需要将变量转换为字符串。但是,如果出现以下情况,我该如何解决问题?

我有一个对象categories如下:

const categories = {
  1: ctgOne,
  2: ctgTwo,
  3: ctgThree,
  4: ctgFour,
};

这些类别对应于包含一些任意数据的对象:

const ctgOne = {
  test1: ["blah", "blah", "blah"],
  test2: ["blah", "blah", "blah"],
};
const ctgTwo = {
  test1: ["blah", "blah", "blah"],
  test2: ["blah", "blah", "blah"],
  test3: ["blah", "blah", "blah"],
};
const ctgThree = {
  test1: ["blah", "blah", "blah"],
  test3: ["blah", "blah", "blah"],
};
const ctgFour = {
  test2: ["blah", "blah", "blah"],
  test3: ["blah", "blah", "blah"],
};

我有另一个对象 categoryList 包含一些与数组中每个类别关联的数字:

const categoryList = {
  ctgOne: [1, 3, 5, 8, 13],
  ctgTwo: [23, 4, 78],
  ctgThree: [12, 33, 54, 8, 13, 12, 45],
  ctgFour: [1, 35, 5, 2],
};

当我 运行 以下脚本时,由于显而易见的原因,第二个 console.log(count); 出现错误,因为在 count = categoryList[categoryName].length; 中,“categoryName” 必须是一个字符串。但是,如果我将 categories 对象中的类别转换为字符串,console.log(keys); 会给出字符串的长度而不是对象中键的数量。

let categoryNumber = 1;
let categoryName = categories[categoryNumber];

let keys = Object.keys(categoryName).length;

console.log(keys);

count = categoryList[categoryName].length;

console.log(count);

解决这个难题的最佳方法是什么?我想计算对象中键的数量以及 categoryList.

中的数字

在你的对象中,为什么不存储对象名称,它是一个字符串。

在您的类别列表中,使用名称而不是对象作为键。

例如,

const ctgOne = {
    name: "Category 1",
    test1: ...,
    test2: ...
}
const ctgTwo = {
    name: "Category 2",
    test1: ...,
    test2: ...
}

const categoryList = {
    "Category 1": [1, 3, 5, 8, 13],
    "Category 2": [23, 4, 78],
}

那你可以做

let categoryNumber = 1;
let category = categories[category];
let categoryName = category.name;

let keys = Object.keys(category).length;

console.log(keys);

count = categoryList[categoryName].length;

console.log(count);

您不会将变量名称作为字符串。充其量,你会反过来做,但实际上你不应该关心变量名作为数据。您可以(并且应该)在 categories 对象中内联这 4 个 const 变量。

要从其他对象获取相应的值,请在 categoriescategoryList 中使用 相同的键 。也就是说,要么

const categories = {
  ctgOne: { test1: …, test2: …},
  ctgTwo: { test1: …, test2: …, test3: …},
  ctgThree: { test1: …, test3: …},
  ctgFour: { test2: …, test3: …},
};
const categoryList = {
  ctgOne: [1, 3, 5, 8, 13],
  ctgTwo: [23, 4, 78],
  ctgThree: [12, 33, 54, 8, 13, 12, 45],
  ctgFour: [1, 35, 5, 2],
};

const categories = {
  1: { test1: …, test2: …},
  2: { test1: …, test2: …, test3: …},
  3: { test1: …, test3: …},
  4: { test2: …, test3: …},
};
const categoryList = {
  1: [1, 3, 5, 8, 13],
  2: [23, 4, 78],
  3: [12, 33, 54, 8, 13, 12, 45],
  4: [1, 35, 5, 2],
};

但不是它们的混合体。如果你真的需要他们两个,你不会离开没有单独的映射 table.