Объявление массива объектов

У меня есть переменная, которая является массивом, и я хочу, чтобы каждый элемент массива действовал как объект по умолчанию. Чтобы достичь этого, я могу сделать что-то подобное в своем коде.

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

Это отлично работает, но я не хочу упоминать номер индекса. Я хочу, чтобы все элементы моего массива были объектом. Как объявить или инициализировать его?

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

Я попробовал вышеуказанный код, но он не работает. Как инициализировать массив объектов без использования номера индекса?

Ответ 1

Используйте 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({});

Ответ 2

В зависимости от того, что вы подразумеваете под объявлением, вы можете попробовать литералы объектов в литерале массива :

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

EDIT: Если ваша цель - массив, чьи элементы 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" };

Ответ 3

Увидев, как вы ответили в комментариях. Похоже, было бы лучше использовать push, как предложили другие. Таким образом, вам не нужно знать индексы, но вы можете добавить к массиву.

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

В этом случае каждый раз, когда вы используете эту функцию, он будет вставлять новый объект в массив.

Ответ 4

Вам не нужно создавать пустой Object когда-либо. Вы ничего не можете с ними поделать. При необходимости добавьте рабочие объекты к образцу. Используйте push, как предложил Даниэль Иммс, и используйте литералы, как предложил Фредерик Хамиди. Кажется, вы хотите запрограммировать 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) создает массив с 10 undefined элементами.

Ответ 5

Вы можете создать массив типа объекта в одной строке (просто замените новый объект() на свой объект):

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));

Ответ 7

Ну, array.length должен сделать трюк или нет? что-то вроде, я имею в виду, что вам не нужно знать диапазон индексов, если вы просто прочитали его.

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

Возможно, я не понял ваш вопрос правильно, но вы должны иметь возможность получить длину своего массива таким образом и преобразовать их в объекты. Даниэль дал тот же ответ, если честно. Вы могли бы просто сохранить длину массива в своей переменной, и это будет сделано.

ЕСЛИ это не должно произойти, по моему мнению, вы не можете получить длину вашего массива. Как вы сказали без получения номера индекса, вы можете сделать это следующим образом:

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

Это нехорошая версия выше, но цикл будет выполняться до тех пор, пока вы не "запуститесь" из диапазона индексов.

Ответ 8

Попробуйте это -

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

Ответ 9

//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); 

Этот пример работает со мной. Снимок для вывода на консоли браузера

Ответ 10

Используйте 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())
}    

Ответ 11

Используя 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);

Ответ 12

Если вы хотите, чтобы все элементы внутри массива были объектами, вы можете использовать прокси-сервер 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

Если вы ищете реализацию polyfill, вы можете воспользоваться этой ссылкой: https://github.com/GoogleChrome/proxy-polyfill

Ответ 13

Приведенный ниже код из моего проекта может быть полезен для вас

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

Ответ 14

const sample = [];
    list.forEach(element => {
      const item = {} as { name: string, description: string };
      item.name= element.name;
      item.description= element.description;
      result.push(item);
    });
    return sample;

Кто-нибудь попробует это.. и предложит что-нибудь.

Ответ 15

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