J'ai un tableau qui ressemble à ceci -
myOldArray = [{
"id": 1,
"form_id": 4,
"form_field_name": "field_1",
"helperTitle": "This is Box 1's TItle",
"helperText": "This is Box 1 data",
"created_at": null,
"updated_at": null
},
{
"id": 2,
"form_id": 4,
"form_field_name": "field_2",
"helperTitle": "Box 2 Title",
"helperText": "Box 2 TExt",
"created_at": null,
"updated_at": null
}
]
var AR = myOldArray;
var newArr = AR.filter(function(item) {
if (item.form_field_name == fieldName) {
console.log('txt - ' + item + '\n\n');
return item;
}
});et j'ai besoin de dupliquer / copier / convertir / ... peu importe ... ce tableau en quelque chose comme ça - p >
console.log(myNewArray.field_1.title)
afin que je puisse le référencer par
myNewArray = {
field_1['title'] = "This is Box 1's Title",
field_1['text'] = "This is Box 1 data",
field_2['title'] = "Box 2 Title",
field_2['text'] = "Box 2 Text",
}
ou quelque chose de plus utilisable.
J'ai essayé de utilisez la méthode du filtre en vain. Tout ce que j'ai essayé revient juste indéfini. Je suis juste super confus. Y a-t-il un meilleur moyen de référencer les éléments dans le sous-tableau directement sans convertir?
Cela fonctionnait en quelque sorte ... le console.log afficherait ce que je voulais mais la valeur renvoyée serait affichée comme non définie, me déroute.
var myOldArray = [{
"id": 1,
"form_id": 4,
"form_field_name": "field_1",
"helperTitle": "This is Box 1's TItle",
"helperText": "This is Box 1 data",
"created_at": null,
"updated_at": null
},
{
"id": 2,
"form_id": 4,
"form_field_name": "field_2",
"helperTitle": "Box 2 Title",
"helperText": "Box 2 TExt",
"created_at": null,
"updated_at": null
}
]
4 Réponses :
Vous pouvez mapper les éléments de nouveaux objets avec les propriétés souhaitées en tant qu'objets.
Cela fonctionne avec
Array # map , champ avec un autre objet avec les propriétés renommées, Object.assign et diffusion de la syntaxe ...
.as-console-wrapper { max-height: 100% !important; top: 0; }
var data = [{ id: 1, form_id: 4, form_field_name: "field_1", helperTitle: "This is Box 1's TItle", helperText: "This is Box 1 data", created_at: null, updated_at: null }, { id: 2, form_id: 4, form_field_name: "field_2", helperTitle: "Box 2 Title", helperText: "Box 2 TExt", created_at: null, updated_at: null }],
result = Object.assign(
...data.map(({ id, helperTitle: title, helperText: text }) =>
({ ['field_' + id]: { title, text } }))
);
console.log(result);
J'ai des problèmes pour publier du code dans les commentaires, apparemment ... mais j'obtiens une erreur avec le code que vous avez fourni qui dit Impossible de convertir undefined en objet.
$ .get ('/ api / system / formHelperText / 4', function (data) {if (data) {this.helpText = data;}} .bind (this)); var X = this.helpText; console.log (X); result = Object.assign (... X.map (({id, helperTitle: title, helperText: text}) => ({['field_' + id]: {title, text}}))); console.log (résultat);
cela ressemble à un problème asynchrone, à cause du undefined voyez-vous le tableau dans le console.log? pouvez-vous prendre un élément du tableau?
@Deadlance vous n'avez pas besoin d'analyser la chaîne JSON pour objecter
dans mon code ci-dessus mal formaté, le premier console.log (X) sort effectivement le tableau dans le journal, mais le console.log (résultat) produit l'erreur
@Slai, je ne pense pas. console.log (this.helpText [0] .helperTitle); génère la chaîne appropriée. Le problème que j'ai est, je ne veux pas sortir la chaîne de [0] ... J'ai besoin d'obtenir la chaîne pour l'index où form_field_name = une chose spécifique.
comme je l'ai écrit, cela pourrait être un problème asynchrone, où vous traitez des données qui ne sont pas disponibles pour le moment.
@ninaScholz cela semble être un problème asynchrone ... Maintenant, pour comprendre comment résoudre ce problème ...
@deadlance stackoverflow.com/questions/23667086/...
Je suppose que tout le traitement devrait être dans la fonction $ .get:
$.getJSON('/api/system/formHelperText/4', function (data) {
var myNewArray = data.map(function(item) {
var obj = {};
obj['field_' + item.id] = { Title: item.helperTitle, Text: item.helperText };
return obj;
});
console.log(myNewArray);
};
Vous pouvez écrire un simple réduisez l'appel pour obtenir le résultat souhaité:
const array=[{id:1,form_id:4,form_field_name:"field_1",helperTitle:"This is Box 1's TItle",helperText:"This is Box 1 data",created_at:null,updated_at:null},{id:2,form_id:4,form_field_name:"field_2",helperTitle:"Box 2 Title",helperText:"Box 2 TExt",created_at:null,updated_at:null}]
const result= array.reduce((acc, a) =>
(acc[a.form_field_name] = {title: a.helperTitle,text: a.helperText}, acc), {});
console.log(result);
La réponse est très simple:
const myObj = objs.get("field_1");
Et maintenant vous pouvez accéder à vos objets par le nom du champ:
const objs = new Map();
for (const obj of myOldArray) {
objs.set(obj.form_field_name, obj);
}
La question publiée ne semble pas inclure aucune tentative de résoudre le problème. StackOverflow s'attend à ce que vous essayez de résoudre votre propre problème d'abord , car vos tentatives nous aident à mieux comprendre ce que vous voulez. Veuillez modifier la question pour montrer ce que vous avez essayé, afin d'illustrer un roadblock spécifique que vous rencontrez dans un exemple reproductible minimal . Pour plus d'informations, veuillez consulter Comment demander et suivre le tour .
btw, votre
myNewArraydoit être un objet au lieu d'un tableau, car vous utilisez des propriétés nommées au lieu de clés.Ouais, je pensais avoir utilisé des accolades sur myNewArray, mais j'essaye de résoudre ce problème depuis 6 heures ... la fatigue est apparue ... je l'ai réparé.
Quel est le problème (ou non utilisable) avec
myOldArray [0] .helperTitle?Je ne sais pas de quel index de tableau j'ai besoin lorsque je le produit. J'ai besoin de référencer des index spécifiques - IE, j'ai besoin de sortir helperTitle pour l'index où form_field_name = field_2 et je ne saurai pas si c'est l'index 0 ou 1, ou il peut y avoir 100 éléments dans ce tableau.
Veuillez mettre à jour l'extrait que j'ai créé pour vous avec du code HTML pertinent
@Deadlance On dirait que vous devez vraiment en apprendre un peu plus sur les structures de données dans JS.
@Ben Je travaille à apprendre autant que je peux aussi vite que possible. C'est juste un problème étrange sur lequel je suis coincé. Je ne peux pas comprendre comment obtenir des index spécifiques de tableaux multidimensionnels via une paire clé / valeur au lieu de leur index.