对象的声明阵列

问题描述 投票:72回答:13

我有一个变量,它是一个数组,我想要的数组的每个元素作为默认的对象。要做到这一点,我可以做这样的事情在我的代码。

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

这工作得很好,但我不想提任何索引号。我希望我的数组中的所有元素是一个对象。如何声明或初始化呢?

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

我想上面的代码,但它不工作。如何初始化不使用索引号对象的数组?

javascript arrays object declare
13个回答
80
投票

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

请注意,您也可以替代new Array()[]new Object() {}所以它变成:

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

0
投票

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

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

你可以用它

var x = 100;
var sample = [];
for(let i=0; i<x ;i++){
  sample.push({}) 
  OR
  sample.push(new Object())
}    

0
投票

及如何使用foreach我们可以存储在情况下,我们有我们想要做的一些数据业务已经登录数据。

var sample = new Array();
var x = 10;
var sample = [1,2,3,4,5,6,7,8,9];
var data = [];

sample.forEach(function(item){
    data.push(item);
})

document.write(data);

例如,通过使用简单的for循环

var data = [];
for(var i = 0 ; i < 10 ; i++){
   data.push(i);
}
document.write(data);

0
投票

如果你想要一个数组中的所有元素是对象,你可以使用JavaScript代理,你在一个阵列,将其插入到目标应用验证。这是很简单的,

const arr = new Proxy(new Array(), {
  set(target, key, value) {
    if ((value !== null && typeof value === 'object') || key === 'length') {
      return Reflect.set(...arguments);
    } else {
      throw new Error('Only objects are allowed');
    }
  }
});

现在,如果你尝试做这样的事情:

arr[0] = 'Hello World'; // Error

它会抛出一个错误。不过,如果你插入的对象,它会被允许:

arr[0] = {}; // Allowed

有关代理的详细信息,请参考此链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

如果你正在寻找一个填充工具实现你可以检出此链接:https://github.com/GoogleChrome/proxy-polyfill


0
投票

下面的代码从我的项目也许你对你有好处

  reCalculateDetailSummary(updateMode: boolean) {

    var summaryList: any = [];
    var list: any;
    if (updateMode) { list = this.state.pageParams.data.chargeDefinitionList }
    else {
        list = this.state.chargeDefinitionList;
    }

    list.forEach((item: any) => {
        if (summaryList == null || summaryList.length == 0) {
            var obj = {
                chargeClassification: item.classfication,
                totalChargeAmount: item.chargeAmount
            };
            summaryList.push(obj);

        } else {
            if (summaryList.find((x: any) => x.chargeClassification == item.classfication)) {
                summaryList.find((x: any) => x.chargeClassification == item.classfication)
                    .totalChargeAmount += item.chargeAmount;
            }
        }
    });

    if (summaryList != null && summaryList.length != 0) {
        summaryList.push({
            chargeClassification: 'Total',
            totalChargeAmount: summaryList.reduce((a: any, b: any) => a + b).totalChargeAmount
        })
    }

    this.setState({ detailSummaryList: summaryList });
}

-7
投票
var ArrayofObjects = [{}]; //An empty array of objects.

31
投票

根据你所说的述说,你可以尝试在object literals使用array literal

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

编辑:如果你的目标是一个数组,其undefined项默认为空对象的文字,你可以写一个小工具功能:

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" };

11
投票

看后你怎么在评论作出回应。看起来这将是最好使用push如其他人所说。这样,你不需要知道指数,但你仍然可以添加到阵列中。

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

在这种情况下,每次使用该功能时,它会推一个新的对象到数组。


10
投票

你并不真的需要不断创造空白Objects。你不能做他们什么。只需根据需要添加你的工作对象的样本。使用push丹尼尔IMMS建议,并使用文字作为弗雷德里克·哈米迪建议。你似乎要像C.方案的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. */

相信使用new Array(10)创建具有10个undefined元素的数组。


7
投票

您可以在一行中实例化“对象类型”的数组像这样(只是你的对象替换新的对象()):

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

6
投票

您可以使用fill()

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

将创建5个项目的数组。然后你可以使用的forEach例如。

arr.forEach(str => console.log(str));

5
投票

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

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

也许我没有正确地理解你的问题,但你应该能够得到您的数组的长度,这样并将它们转换为对象。丹尼尔种了同样的回答是诚实的。你可以只保存数组长度在他的变量,它会做。

IF和这不应该在我看来发生,你不能让你的数组长度。至于你说的W / O得到的索引号,你可以做这样的:

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

它上面的一个的未漂亮的版本,但循环将执行,直到你“跑”出来的指标范围之内。


3
投票

尝试这个-

var arr = [];
arr.push({});

3
投票
//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); 

本例将我。 Snapshot for the Output on Browser Console

© www.soinside.com 2019 - 2024. All rights reserved.