声明对象数组
我有一个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.