J'ai besoin de créer un tableau de littéraux d'objet comme celui-ci:
var myColumnDefs = [
{key:"label", sortable:true, resizeable:true},
{key:"notes", sortable:true,resizeable:true},......
Dans une boucle comme celle-ci:
for (var i = 0; i < oFullResponse.results.length; i++) {
console.log(oFullResponse.results[i].label);
}
La valeur de key
doit être results[i].label
dans chaque élément du tableau.
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
});
}
La réponse de RaYell est bonne - elle répond à votre question.
Il me semble cependant que vous devriez vraiment créer un objet avec des étiquettes avec des sous-objets comme valeurs:
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;
L'approche ci-dessus devrait être beaucoup plus rapide et idiomatique que de chercher dans l'ensemble du tableau d'objets une clé pour chaque accès.
C’est ce que Array # map sont bons à
var arr = oFullResponse.results.map(obj => ({
key: obj.label,
sortable: true,
resizeable: true
}))
Dans la même idée de Nick Riggs mais je crée un constructeur, et un Push un nouvel objet dans le tableau en l'utilisant. Il évite la répétition des clés de la 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)));
}
Cela fonctionnera:
var myColumnDefs = new Object();
for (var i = 0; i < oFullResponse.results.length; i++) {
myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
}
Je créerais le tableau et y ajouterais les littéraux d'objet.
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});
}
Vous pouvez faire quelque chose comme ça dans ES6.
new Array(10).fill().map((e,i) => {
return {idx: i}
});
Si vous voulez aller encore plus loin que @tetra avec ES6, vous pouvez utiliser la syntaxe dite " Object spread " et procéder comme suit:
let john = {
firstName: "John",
lastName: "Doe",
};
let people = new Array(10).fill().map((e, i) => {
return {
...john,
id: i
}
});