javascript - with - w3schools tag html




Como criar uma matriz de literais de objeto em um loop? (6)

Eu preciso criar uma matriz de literais de objeto como este:

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

Em um loop como este:

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

O valor da key deve ser results[i].label em cada elemento da matriz.


É isso que Array#map é bom em

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

A resposta do RaYell é boa - responde à sua pergunta.

Parece-me que você deve realmente estar criando um objeto codificado por rótulos com sub-objetos como valores:

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;

A abordagem acima deve ser muito mais rápida e idiomática do que procurar toda a matriz de objetos por uma chave para cada acesso.


Isso vai funcionar:

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

Na mesma ideia de Nick Riggs, mas eu crio um construtor, e um push de um novo objeto na matriz usando-o. Evite a repetição das chaves da classe:

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

Você pode fazer algo parecido no ES6.

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

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




object-literal