У меня есть переменная, которая является массивом, и я хочу, чтобы каждый элемент массива по умолчанию действовал как объект. Для этого я могу сделать что-то подобное в своем коде.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Это нормально работает, но я не хочу упоминать какой-либо порядковый номер. Я хочу, чтобы все элементы моего массива были объектами. Как мне его объявить или инициализировать?
var sample = new Array();
sample[] = new Object();
Я пробовал приведенный выше код, но он не работает. Как инициализировать массив объектов без использования порядкового номера?
javascript
arrays
object
declare
Прасат К
источник
источник
array.push(objYouWant )
внутри функции определенно будет решением. Таким образом, каждый раз, когда функция запускается, она добавляет новый объект с любыми свойствами, которые вы хотите.Ответы:
Используйте,
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({});
источник
В зависимости от того, что вы имеете в виду под объявлением , вы можете попробовать использовать объектные литералы в литерале массива :
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" };
источник
push()
.Вы можете использовать fill () .
let arr = new Array(5).fill('lol'); let arr2 = new Array(5).fill({ test: 'a' }); // or if you want different objects let arr3 = new Array(5).fill().map((_, i) => ({ id: i }));
Создадим массив из 5 элементов. Затем вы можете использовать, например, forEach.
arr.forEach(str => console.log(str));
Обратите внимание, что при выполнении
new Array(5)
это просто объект длиной 5, а массив пуст. Когда вы используете,fill()
вы заполняете каждое отдельное место тем, что хотите.источник
Увидев, как вы ответили в комментариях. Кажется, лучше всего использовать
push
как предлагали другие. Таким образом, вам не нужно знать индексы, но вы все равно можете добавлять их в массив.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
В этом случае каждый раз, когда вы используете эту функцию, она помещает новый объект в массив.
источник
Вам действительно не нужно создавать пустые
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)
создает массив из 10undefined
элементов.источник
Вы можете создать экземпляр массива «объектного типа» в одной строке следующим образом (просто замените new Object () своим объектом):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
источник
Ну
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; }
Это неприятная версия вышеприведенного, но цикл будет выполняться до тех пор, пока вы не выйдете за пределы диапазона индекса.
источник
Попробуй это-
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);
Этот пример работает со мной. Снимок для вывода на консоль браузера
источник
Используйте 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()) }
источник
Используя 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);
источник
Если вы хотите, чтобы все элементы внутри массива были объектами, вы можете использовать прокси-сервер 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
источник
Приведенный ниже код из моего проекта может быть вам полезен
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 }); }
источник
const sample = []; list.forEach(element => { const item = {} as { name: string, description: string }; item.name= element.name; item.description= element.description; sample.push(item); }); return sample;
Кто-нибудь попробует это .. и предложит что-нибудь.
источник
var ArrayofObjects = [{}]; //An empty array of objects.
источник