如何在循环中创建对象字面量的数组?

我需要像这样创建一个对象字面量数组:

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

659733 次浏览
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 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 myColumnDefs = new Array();


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

RaYell的回答很好,它回答了你的问题。

在我看来,虽然你真的应该创建一个对象的标签键与子对象作为值:

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;

上面的方法应该比在整个对象数组中搜索每个访问的键要快得多,而且习惯得多。

这是可行的:

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

和Nick Riggs的想法一样,但是我创建了一个构造函数,用它在数组中推入一个新对象。它避免了类键的重复:

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 arr = oFullResponse.results.map(obj => ({
key: obj.label,
sortable: true,
resizeable: true
}))

你可以在ES6中做类似的事情。

new Array(10).fill().map((e,i) => {
return {idx: i}
});

如果你想在ES6中使用@tetra,你可以使用对象扩展语法并像这样做:

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


const people = new Array(10).fill().map((e, i) => {(...john, id: i});