Как создать массив объектных литералов в цикле?

Мне нужно создать массив литералов объекта, как это:

var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......

В цикле, как это:

for (var i = 0; i < oFullResponse.results.length; i++) {
    console.log(oFullResponse.results[i].label);
}

Значениеkey должно бытьresults[i].label в каждом элементе массива.

Ответы на вопрос(9)

Вы можете сделать что-то подобное в ES6.

new Array(10).fill().map((e,i) => {
   return {idx: i}
});
 Pe Wu27 янв. 2019 г., 23:01
Если вы хотите пойти еще дальше с ES6, вы можете использовать так называемый "Синтаксис распространения объекта " и сделать что-то вроде этого: <! - язык: js ->      let john = {firstName: "Джон», Фамилия: "Doe»,} let people = new Array (10) .fill (). map ((e, i) => {return {... john, id: i}});
var myColumnDefs = new Array();

for (var i = 0; i < oFullResponse.results.length; i++) {
    myColumnDefs.push({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
}
 RaYell17 авг. 2009 г., 22:17
Это'лучше инициализировать массив, используя[] вместо .new Array()
 Adrian P.27 февр. 2016 г., 22:12
Интересное обсуждение [] против нового массива ()stackoverflow.com/questions/7375120/...

чем @tetra с ES6, вы можете использовать так называемый "Синтаксис распространения объекта " и сделать что-то вроде этого:

let john = {
    firstName: "John",
    lastName: "Doe",
};

let people = new Array(10).fill().map((e, i) => {

    return {
        ...john,
        id: i
    }
});

Это то, чтоМассив # Карта хороши в

var arr = oFullResponse.results.map(obj => ({
    key: obj.label,
    sortable: true,
    resizeable: true
}))

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

var arr = [];
var columnDefs = function(key, sortable, resizeable){
    this.key = key; 
    this.sortable = sortable; 
    this.resizeable = resizeable;
    };

for (var i = 0; i < len; i++) {
    arr.push((new columnDefs(oFullResponse.results[i].label,true,true)));
}

Тем не менее, мне кажется, что вы действительно должны создавать объект, снабженный метками с суб-объектами в качестве значений:

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

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

 thatOneGuy17 июл. 2015 г., 17:26
хороший ответ, долго искал как получить доступ к информации, спасибо
 Arlen Beiler08 мар. 2013 г., 00:12
Вау, спасибо!
 superUntitled24 нояб. 2013 г., 02:32
похоже, вы пропустили точку с запятой после того, как вы установили ключ var?
 Triptych25 нояб. 2015 г., 15:46
Милсон - в таком случае этоне очень "ключ»
 winner_joiner06 апр. 2013 г., 14:18
+1, так как ключевое решение, имеет больше смысла и помогает мне с моими потребностями :)
 Milson05 нояб. 2015 г., 18:01
Что делать, если ключ должен быть более одного раза! [»заметки'] может произойти более одного раза, тогда что мы можем сделать?

Это будет работать: я

 var myColumnDefs = new Object();
 for (var i = 0; i < oFullResponse.results.length; i++) {
     myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
  }

а затем добавить к нему литералы объекта.

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}
Решение Вопроса
var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}
 Triptych22 авг. 2009 г., 18:11
Да, но тыне изменяйте массив каждую итерацию. Если бы вы были, это было бы смешно сравнивать с длиной в любом случае в большинстве случаев.
 RaYell17 авг. 2009 г., 22:16
расчет длины только один раз, вероятно, хорошая идея, я хочу добавитьvar obj чтобы сделать код более понятным, конечно, вы можете пропустить его, вы можете написать весь скрипт в одну строку, если хотите :)
 fdrv16 мар. 2016 г., 23:57
Почему обр становится объектом? Может ли js иметь массив объектов как массив, а не как объект?jsfiddle.net/91cgc4zu
 codecowboy17 авг. 2009 г., 22:24
Спасибо всем. Молниеносный ответ!
 Peter Bailey17 авг. 2009 г., 22:11
Вы можете пропуститьvar obj = { немного, просто толкни сам литерал.
 Triptych17 авг. 2009 г., 22:18
@kangax, Длина не "рассчитывается», Это'это операция O (1).
 JR Lawhorne30 мая 2016 г., 18:11
Мне нравится шаблон получения длины вне цикла. Даже если это не имеет значения здесь, этоЭто хорошая привычка для случаев (и других языков), где это имеет значение.
 kangax17 авг. 2009 г., 22:14
Я бы посчиталlength только однажды.
 wjhplano03 янв. 2014 г., 17:51
чувак, это как раз то, что мне нужно для моего проекта!
 Peter Bailey17 авг. 2009 г., 22:32
@Triptych - Да, но этопоиск свойства, который вы выполняете с каждой итерацией, которая нет бесплатно и его можно избежать. Микро-оптимизация? Возможно. Кроме того, это "жить" значение - если вы измените массив в цикле, длина будет меняться на последовательных итерациях, которые могут привести к бесконечности. Дай это часыyoutube.com/watch?v=mHtdZgou0qU
 kta27 янв. 2014 г., 01:04
@RaYell: отличный ответ, приятель. Также мне нравится ваш личный сайт.

Ваш ответ на вопрос