如何在 Javascript 中将数字作为字符串创建关联数组

How to make associative array with number as string in Javascript

我有一个代码:

var index = 100;

var arr =[];

arr[index.toString()] = "Hello"

结果:索引仍被称为整数而不是字符串。任何人都可以解释我的代码有什么问题吗?

您必须使用 {} 声明 关联数组 ,这会创建一个新的 object,因为在 JavaScript 中,数组总是使用编号指标。

您需要声明一个对象:var arr={};

  • 数组 使用编号索引
  • 对象 使用命名索引.

var index = 100;
var arr ={};
arr[index.toString()] = "Hello";
console.log(arr);

在 ES6 中,您可以使用 Map,它将任何类型作为键。

var map = new Map;

map.set(100, "Hello");
map.set('100', "Foo");

console.log(map.get(100));   // 'Hello'
console.log(map.get('100')); // 'Foo'
console.log([...map]);

How to make associative array with number as string in Javascript

JavaScript 在经常使用术语的意义上没有关联数组。它有对象,从 ES2015(又名 "ES6")开始,它有 Maps.

The result : index still known as integer not a string. Anyone can explain what's wrong with my code?

index变量的值仍然是一个数字,是的,因为你没有做任何改变它的事情。但是数组中的索引是一个字符串(即使您不使用 .toString() 也是如此),因为标准数组 aren't really arrays at all1,它们是对 class 属性(其名称是符合数组索引定义的字符串)进行特殊处理的对象,一个特殊的 length 属性,以及使用 Array.prototype 作为他们的原型。

这里证明数组索引是字符串:

var a = [];
a[0] = "zero";
for (var name in a) {
  console.log("name == " + name + ", typeof name == " + typeof name);
}

也就是说,当您需要通用对象或地图时,您不想使用数组。

此处使用通用对象进行 name/value 映射:

var o = Object.create(null);
var name = "answer";
o[name] = 42;
console.log(o[name]); // 42

对象中的 属性 名称是字符串或(从 ES2015 开始)符号。我使用 Object.create(null) 创建对象,因此它不会将 Object.prototype 作为其原型,因为它为我们提供了我们不需要的属性(toStringvalueOf 等)如果我们将该对象用作地图,则不需要。

这里使用 Map:

var m = new Map();
var name = "answer";
m.set(name, 42);
console.log(m.get(name)); // 42

Map相对于对象的主要优点是:

  • 他们的键可以是任何东西,而不仅仅是字符串或符号
  • 它们是可迭代的,因此您可以使用for-of循环遍历它们包含的映射
  • Maps 有一个 size 属性 告诉你他们有多少条目
  • Map保证条目的迭代按照条目添加到地图的顺序执行

JavaScript 不支持具有命名索引的数组,在JavaScript 中,数组始终使用编号索引。

如果使用命名索引,JavaScript 会将数组重新定义为标准对象。 之后,所有的数组方法和属性都会产生不正确的结果。

如您在以下示例中所见:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
console.log(x);
var y = person[0];             // person[0] will return undefined
console.log(y);