Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否存储包含数组的对象?_Javascript_Node.js - Fatal编程技术网

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());


旁注:即使我们将它们写为数字,对象中的键(属性名称)也始终是字符串(除非您使用ES2015
Symbol
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());

旁注:即使我们将它们写为数字,对象中的键(属性名称)也始终是字符串(除非您使用ES2015
Symbol
s,在这里您可能不会使用)。相反,ES2015
地图中的键可以是任何东西。
Map
实例中的键相等是使用特殊算法确定的(基本上是
=
,除了
NaN
等于自身[而它不在
=
]中]