声明对象数组

Pra*_*h K 77 javascript arrays object declare

我有一个变量,它是一个数组,我希望默认情况下数组的每个元素都充当一个对象.为了实现这一点,我可以在我的代码中做这样的事情.

var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Run Code Online (Sandbox Code Playgroud)

这很好,但我不想提及任何索引号.我希望我的数组的所有元素都是一个对象.我如何声明或初始化它?

var sample = new Array();
sample[] = new Object();
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的代码,但它不起作用.如何在不使用索引号的情况下初始化对象数组?

Dan*_*mms 82

使用array.push()将项目添加到数组的结尾.

var sample = new Array();
sample.push(new Object());
Run Code Online (Sandbox Code Playgroud)

要做到这一点n,请使用for循环.

var n = 100;
var sample = new Array();
for (var i = 0; i < n; i++)
    sample.push(new Object());
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以new Array()使用[]和替换new Object(),{}因此它变为:

var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
    sample.push({});
Run Code Online (Sandbox Code Playgroud)


Fré*_*idi 31

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

var sample = [{}, {}, {} /*, ... */];
Run Code Online (Sandbox Code Playgroud)

编辑:如果您的目标是一个undefined默认情况下项目为空对象文字的数组,您可以编写一个小实用程序函数:

function getDefaultObjectAt(array, index)
{
    return array[index] = array[index] || {};
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

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

甚至:

getDefaultObjectAt(sample, 1).prop = "val";  // { prop: "val" } stored at index 1.
Run Code Online (Sandbox Code Playgroud)

当然,直接赋值给返回值是getDefaultObjectAt()行不通的,所以你不能写:

getDefaultObjectAt(sample, 2) = { prop: "val" };
Run Code Online (Sandbox Code Playgroud)


Jef*_*ver 11

在看到您在评论中的回复后.似乎最push好像其他人建议的那样使用它.这样您就不需要知道索引,但仍可以添加到数组中.

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

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


Eri*_*low 10

你真的不需要创造空白Object.你不能对它们做任何事情.只需根据需要将工作对象添加到样本中.使用pushDaniel Imms建议,并使用FrédéricHamidi建议的文字.你似乎想像J一样编写Javascript.

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. */
Run Code Online (Sandbox Code Playgroud)

我相信使用new Array(10)创建一个包含10个undefined元素的数组.


Ced*_*Ced 8

你可以使用fill()然后map.这是自我解释的.

let arr = new Array(5).fill('lol');
// or if you want different objects
let arr2 = new Array(5).fill().map(x => ({ test: 'a' }));
Run Code Online (Sandbox Code Playgroud)

将创建一个包含5个字符串对象的数组(不是字符串!).然后你可以使用forEach作为例子.

arr.forEach(str => console.log(str));
Run Code Online (Sandbox Code Playgroud)

在我看来,这个问题的答案毫无疑问是冗长的.所以我希望这对你们中的一些人有用.


Mar*_*cks 7

您可以像这样在一行中实例化一个"对象类型"数组(只需用您的对象替换新的Object()):

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

  • 如果我不知道元素的价值怎么办? (2认同)

Shu*_*hya 5

尝试这个-

var arr = [];
arr.push({});
Run Code Online (Sandbox Code Playgroud)


小智 5

array.length应该诀窍呢?类似的,我的意思是你不需要知道索引范围,如果你只是读它..

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

也许我没有正确理解你的问题,但你应该能够以这种方式获得数组的长度并将它们转换为对象.老实说,丹尼尔给出了同样的答案.你可以将你的数组长度保存到他的变量中,它就可以了.

如果在我看来这不应该发生你不能得到你的数组长度.如你所说没有获得索引号,你可以这样做:

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

它是上面那个版本的不太好的版本,但循环将执行,直到你"跑出"索引范围.


Abd*_*sha 5

//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); 
Run Code Online (Sandbox Code Playgroud)

这个例子对我有用。 浏览器控制台输出的快照