存储一个数组内的对象?

有没有办法存储一个array[id] = "certain value" ,这样每个用户都有一个喜欢的东西的列表?

我试图实现的是有一个数据对象,具有未定义的值,并填写它们,例如,杰克和山姆可以有一个指定的喜爱的电影保存。

我尝试了这样的事情没有成功:

Data.js:

 module.exports = function() { return { favMovie: "" } }; 

App.js:

 var person [] = data(); //1st person person[811767132257839].favMovie = "Matrix"; //2nd person person[107230716367889].favMovie = "Kill Bill"; //3rd person person[973676332752239].favMovie = "Avatar"; ... console.log( "Favorite movie: " + person[id].favMovie ); 

这听起来不像你想要的任何数组,只是对象。

 // Create an object that we'll keep person objects in var personData = {}; // Add a person object to it for person ID #123 personData[123] = {}; // Set person #123's favorite movie: personData[123].favMovie = "Avatar"; // Add a different person; this time, we'll add the movie at // the same time personData[234] = { favMovie: "Matrix" }; 

当像这样使用对象时,有时人们使用Object.create(null)来创build对象,以避免它们具有任何inheritance的属性(如toStringvalueOfconstructor ):

 person[123] = Object.create(null); person[123].favMovie = "Avatar"; 

在ES2015(又名“ES6”)中,您可能想要使用Map而不是人物地图:

 var personData = new Map(); 

…然后使用setget个人对象。

如果个人对象变得复杂,那么可以使用ES5语法为它们使用构造函数和关联的原型:

 function Person() { // ... } Person.prototype.doSomething = function() { // ... }; 

…或ES2015语法:

 class Person { constructor() { // ... } doSomething() { // ... } } 

然后创build它们:

 personData[123] = new Person(); // or if using Map personData.set(123, new Person()); 

附注:即使我们将它们写成数字,对象中的键(属性名称)也总是string (除非使用ES2015 Symbol ,您可能不会在这里)。 相比之下,ES2015 Map中的密钥可以是任何东西。 Map实例中的关键相等是使用特殊的“相同的值零”algorithm(基本上===除了NaN等于自身[而不在=== ])确定的。