Je suis nouveau à node.js et javascript. J'ai le tableau suivant:
[{
name: 'name1',
street: 'street2',
person: 'person1',
phone1: 'phone82 ',
phone2: 'phone3'
},
{
name: 'name2',
street: 'street2',
person: 'person1',
phone1: 'phone1 ',
phone2: 'phone2'
}]
3 Réponses :
Si vous avez la même structure pour tous les éléments de alors ce que j'ai fait? p> p> old_array code>, vous pouvez utiliser mapper code>, filtre code> et Réduire code> Afin de manipuler votre contribution.
mapper code> et divisé code> par \ n code>, quel est votre séparateur de chaîne. Que je l'ai filtré par des chaînes qui ne sont pas vides (car vous avez une option post-correction de \ n code> aussi). Li>
ExtractContacts CODE> Fonction - Il splite la sous-tableau par votre SEPARAOTR, \ t code> et mappez-le en fonction de votre Contacts Temaplte. Li>
const OLD_ARRAY = [
'name1\tstreet\tperson\tphone1\tphone2\n' +
'name2\tstreet2\tperson1\tphone82\tphone3\n'
];
function extractContacts(templates) {
return templates.map(t => t.split('\t'))
.map(details => ({
name: details[0],
street: details[1],
person: details[2],
phone1: details[3],
phone2: details[4]
}));
}
let contacts = OLD_ARRAY.map(str => str.split('\n').filter(str => str !== ''))
.map(template => extractContacts(template))
.reduce((a, acc) => acc.concat(a), []);
console.log(contacts)
Remarquez qu'il n'y a pas deux éléments dans le tableau d'origine si vous lisez la question avec soin
@Patrickroberts Je pense que l'OP avait une faute de frappe, et même s'il ne le faisait pas, il ne fait que changer le + code> sur , code> pour obtenir le format de type tableau
Il est possible que la seule sortie intermédiaire après analyse JSON à partir d'une requête HTTP, par exemple, et que l'OP n'a aucun contrôle sur le format de l'entrée. Vous ne pouvez pas supposer que cela est trivialement possible de modifier le format d'entrée, car la question pourrait simplifier beaucoup de choses pour isoler la partie dont ils ont besoin d'aide.
@Patrickroberts Vous avez raison, j'ai corrigé ma réponse en conséquence
Vous pouvez diviser chaque p> oldarray code> sur \ n code>, puis \ t code> dans Newarray code>, puis utilisez ensuite objet.fromentries code> pour créer un objet à partir de chaque valeur Newarray code>, combinant les valeurs divisées avec chaque clé de en-têtes code>: var oldarray = [
'name1\tstreet\tperson\tphone1\tphone2\n' +
'name2\tstreet2\tperson1\tphone82\tphone3\n'
]
let newarray = [];
oldarray.forEach(s => s.trim().split('\n').map(v => newarray.push(v.split('\t'))));
let headers = {
'name': "",
'street': "",
'person': "",
'phone 1': "",
'phone 2': ""
}
let keys = Object.keys(headers);
out = newarray.map(s => Object.fromEntries(s.map((v, i) => [keys[i], v])));
console.log(out);
Il n'y a pas deux éléments dans le tableau d'origine si vous lisez attentivement la question ...
First Split the tableau par p> \ n code> Pour obtenir des chemins individuels, puis diviser par \ t code> et utilisez réduire code> pour créer une nouvelle en-tête Objets de chaque banane var oldarray = [
'name1\tstreet\tperson\tphone1\tphone2\n' +
'name2\tstreet2\tperson1\tphone82\tphone3\n' +
'name4\tstreet4\tperson4\tphone84\tphone4\n'
]
arr = oldarray.flatMap(o => o.split("\n"))
c = arr.map(o => o.split("\t"))
c.pop()
result = c.reduce((acc,[name, street, person, phone1, phone2],i) => {
acc = [...acc,{name:name,street:street,person:person,phone1:phone1,phone2:phone2}]
return acc
},[])
console.log(result)
Il n'y a qu'un seul élément dans le tableau d'origine, vous rendez-vous compte que?
Correct, c'est un seul élément.
Typo, mon mauvais. @ Sven.hig
Que signifie "après chaque première"? Parce que JS sait Il n'y a aucun symbole + i>, il n'y a que les caractères de votre chaîne. Voulez-vous dire "après chaque nouvelle ligne"?
@ Mike'pomax'kamermans vous avez raison. J'ai fait un autre typo, désolé.
Alors qu'avez-vous réellement essayé? Parce que cela ressemble à une norme "Split sur
\ n code>, puis pour chacun de ceux-ci, scindé sur\ t code>", qui est un code difficilement difficile?