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
.你不能对它们做任何事情.只需根据需要将工作对象添加到样本中.使用push
Daniel 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
元素的数组.
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)
在我看来,这个问题的答案毫无疑问是冗长的.所以我希望这对你们中的一些人有用.
您可以像这样在一行中实例化一个"对象类型"数组(只需用您的对象替换新的Object()):
var elements = 1000;
var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
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)
它是上面那个版本的不太好的版本,但循环将执行,直到你"跑出"索引范围.
//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)
这个例子对我有用。 浏览器控制台输出的快照