Pregunta

Necesito crear una matriz de objetos literales, como este:

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

En un bucle como este:

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

El valor de key debe ser results[i].label en cada elemento de la matriz.

¿Fue útil?

Solución

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

Otros consejos

RaYell la respuesta es bien - conteste a su pregunta.

A mí me parece sin embargo que usted realmente debe ser la creación de un objeto con llave por las etiquetas con los 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;

El enfoque anterior debe ser mucho más rápido y idiomáticas que la búsqueda de la totalidad de la matriz de objeto para una clave para cada acceso.

Esto es lo que Matriz # mapa son buenos en

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

En la misma idea de Nick Riggs, pero puedo crear un constructor, y un impulso de un nuevo objeto de la matriz mediante el uso de la misma. A evitar la repetición de las teclas de la clase:

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

Esto funciona:

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

Se puede hacer algo así en ES6.

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

Me gustaría crear la matriz y luego añadir los objetos literales a él.

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

Si usted quiere ir aún más lejos que @tetra con ES6 puede utilizar el llamado " propagación de objetos sintaxis " y hacer algo como esto:

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

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

    return {
        ...john,
        id: i
    }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top