Как создать массив объектных литералов в цикле?
мне нужно создать массив объектных литералов такой:
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
в каждом элементе массива.
7 ответов:
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 }); }
ответ Райелла хорош - он отвечает на ваш вопрос.
Мне кажется, что вы действительно должны создавать объект, помеченный метками с подобъектами в качестве значений:
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;
приведенный выше подход должен быть намного быстрее и идиоматичнее, чем поиск всего массива объектов для ключа для каждого доступа.
Это массив#map хорошо
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 myColumnDefs = new Object(); for (var i = 0; i < oFullResponse.results.length; i++) { myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true}); }