Javascript 是否存储包含数组的对象?
有没有一种方法可以使用Javascript 是否存储包含数组的对象?,javascript,node.js,Javascript,Node.js,有没有一种方法可以使用数组[id]=“某些值”存储对象,以便每个用户都有一个喜爱的事物列表 我试图实现的是,首先让一个数据对象具有未定义的值,然后填充它们,例如,Jack和Sam可以保存指定的最喜爱的电影 我尝试过这样的方法,但没有成功: Data.js: module.exports = function() { return { favMovie: "" } }; App.js: var person [] = data(); //1st person p
数组[id]=“某些值”
存储对象,以便每个用户都有一个喜爱的事物列表
我试图实现的是,首先让一个数据对象具有未定义的值,然后填充它们,例如,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 );
听起来您根本不需要任何数组,只需要对象
// 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
):
在ES2015(也称为“ES6”)中,您可能希望使用地图而不是人物地图的对象:
var personData = new Map();
…然后对个人对象使用set
和get
如果单个person对象变得复杂,可以使用构造函数和相关原型,使用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());
旁注:即使我们将它们写为数字,对象中的键(属性名称)也始终是字符串(除非您使用ES2015Symbol
s,在这里您可能不会使用)。相反,ES2015地图中的键可以是任何东西。Map
实例中的键相等是使用特殊算法确定的(基本上是==
,除了NaN
本身相等[而它不在==
]中]。听起来你根本不需要任何数组,只需要对象
// 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
):
在ES2015(也称为“ES6”)中,您可能希望使用地图而不是人物地图的对象:
var personData = new Map();
…然后对个人对象使用set
和get
如果单个person对象变得复杂,可以使用构造函数和相关原型,使用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());
旁注:即使我们将它们写为数字,对象中的键(属性名称)也始终是字符串(除非您使用ES2015Symbol
s,在这里您可能不会使用)。相反,ES2015地图中的键可以是任何东西。Map
实例中的键相等是使用特殊算法确定的(基本上是=
,除了NaN
等于自身[而它不在=
]中]