如何在循环中创建对象文字数组?

时间:2009-08-17 20:07:14

标签: javascript arrays object-literal

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

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 个答案:

答案 0 :(得分:369)

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

答案 1 :(得分:59)

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;

上述方法应该比搜索整个对象数组以获取每次访问的密钥更快更有用。

答案 2 :(得分:10)

这是Array#map擅长的

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

答案 3 :(得分:5)

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

答案 4 :(得分:4)

这将有效:

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

答案 5 :(得分:3)

我创建了数组,然后将对象文字附加到它。

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

答案 6 :(得分:2)

var myColumnDefs = new Array();

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

答案 7 :(得分:1)

您可以在ES6中执行类似的操作。

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

答案 8 :(得分:0)

如果您想使用ES6超越@tetra,可以使用所谓的“ 对象传播语法”并执行以下操作:

Location