声明对象数组

我有一个variables,这是一个数组,我希望数组的每个元素默认作为一个对象。 为了达到这个目的,我可以在我的代码中这样做。

var sample = new Array(); sample[0] = new Object(); sample[1] = new Object(); 

这工作正常,但我不想提及任何索引号。 我想我的数组的所有元素是一个对象。 我如何声明或初始化它?

 var sample = new Array(); sample[] = new Object(); 

我试过上面的代码,但它不起作用。 如何初始化一个对象数组而不使用索引号?

使用array.push()将一个项目添加到数组的末尾。

 var sample = new Array(); sample.push(new Object()); 

要做n次使用for循环。

 var n = 100; var sample = new Array(); for (var i = 0; i < n; i++) sample.push(new Object()); 

请注意,您也可以用{}replacenew Array()和用{}replacenew Array() new Object() ,以便它变成:

 var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({}); 

根据您声明的含义,您可以尝试在数组中使用对象字 面值 :

 var sample = [{}, {}, {} /*, ... */]; 

编辑:如果你的目标是一个数组,其undefined项目是默认的空对象文字,你可以写一个小型的实用function:

 function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; } 

然后像这样使用它:

 var sample = []; var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0. 

甚至:

 getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1. 

当然,直接赋值给getDefaultObjectAt()的返回值将不起作用,所以你不能写:

 getDefaultObjectAt(sample, 2) = { prop: "val" }; 

在看到你如何回应评论。 看起来最好像其他人所build议的那样使用push 。 这样你不需要知道索引,但是你仍然可以添加到数组中。

 var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); } 

在这种情况下,每次使用该函数时,都会将新对象推入数组中。

你并不需要永远创build空白Object 。 你不能对他们做任何事情。 只需将您的工作对象添加到样本。 按照丹尼尔·伊姆斯(Daniel Imms)的build议,使用push ,像弗雷德里克·哈米迪(FrédéricHamidi)所说的那样使用文字 你似乎想编程的Javascript像C.

 var samples = []; /* If you have no data to put in yet. */ /* Later, probably in a callback method with computed data */ /* replacing the constants. */ samples.push(new Sample(1, 2, 3)); /* Assuming Sample is an object. */ /* or */ samples.push({id: 23, chemical: "NO2", ppm: 1.4}); /* Object literal. */ 

我相信使用new Array(10)创build了10个undefined元素的数组。

那么array.length应该做的伎俩? 就像,我的意思是你不需要知道索引范围,如果你只是读它..

 var arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } 

也许我没有正确理解你的问题,但你应该能够以这种方式获得你的数组的长度,并将它们转换成对象。 丹尼尔给了同样的答复说实话。 你可以将你的数组长度保存到他的variables中,然后就可以完成了。

如果这不应该发生我认为你不能得到你的数组长度。 正如你所说没有得到索引号你可以这样做:

 var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; } 

这是上面那个不好的版本,但是循环会一直执行,直到你“跑出”索引范围。

你可以像这样在一行中实例化一个“对象types”的数组(只要用你的对象replace的对象):

 var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); }); 

尝试这个-

 var arr = []; arr.push({}); 
 //making array of book object var books = []; var new_book = {id: "book1", name: "twilight", category: "Movies", price: 10}; books.push(new_book); new_book = {id: "book2", name: "The_call", category: "Movies", price: 17}; books.push(new_book); console.log(books[0].id); console.log(books[0].name); console.log(books[0].category); console.log(books[0].price); // also we have array of albums var albums = [] var new_album = {id: "album1", name: "Ahla w Ahla", category: "Music", price: 15}; albums.push(new_album); new_album = {id: "album2", name: "El-leila", category: "Music", price: 29}; albums.push(new_album); //Now, content [0] contains all books & content[1] contains all albums var content = []; content.push(books); content.push(albums); var my_books = content[0]; var my_albums = content[1]; console.log(my_books[0].name); console.log(my_books[1].name); console.log(my_albums[0].name); console.log(my_albums[1].name); 

这个例子和我一起工作。 浏览器控制台上的输出快照

你可以使用fill()然后映射 。 它干净,优雅,自我解释。

 let arr = new Array(5).fill(null).map(v => new String('lol')); 

将创build一个5个string对象(不是string!)的数组。 那么你可以使用forEach为例。

 arr.forEach(d => console.log(d.toString())); 

在这个问题的答案在我看来是不必要的冗长。 所以我希望这对你们中的一些人有用。

 var ArrayofObjects = [{}]; //An empty array of objects.