有没有办法存储object
array[id] = "certain value"
,以便每个用户都有一个喜欢的内容列表?
我想要实现的是首先让数据对象具有未定义的值,然后将其填入,例如Jack和Sam可以保存已分配的收藏电影。
我试过这样的事情没有成功:
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 );
答案 0 :(得分:6)
听起来你根本不需要任何数组,只是对象。
// 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)
创建对象以避免它们具有任何继承属性(如toString
和valueOf
和constructor
):
person[123] = Object.create(null);
person[123].favMovie = "Avatar";
在ES2015(又名“ES6”)中,您可能希望使用Map
而不是对象作为人物地图:
var personData = new Map();
...然后将set
和get
用于个人对象。
如果单个人对象变得复杂,您可以使用构造函数和相关原型,使用ES5语法:
function Person() {
// ...
}
Person.prototype.doSomething = function() {
// ...
};
...或ES2015语法:
class Person {
constructor() {
// ...
}
doSomething() {
// ...
}
}
然后创建它们:
personData[123] = new Person();
// or if using Map
personData.set(123, new Person());
旁注:即使我们将它们写成数字,对象中的键(属性名称)也始终是字符串(除非你使用ES2015 Symbol
s,你可能不会这里)。相比之下,ES2015 Map
中的键可以是任何东西。 Map
实例中的密钥相等是使用特殊的"same value zero"算法确定的(除了===
等于它自己之外基本上是NaN
[而不是===
}}])。