Il semble assez facile mais quand je pense à la façon dont je voudrais l'écrire, il se transforme en gros désordre et je veux que ce soit aussi efficace que possible (dans un montant raisonnable au moins). J'ai également deux questions relatives à ce problème.
1) Donc, j'ai une gamme d'objets qui ressemblent à ce p> mais la position n'est pas garantie ordre, comme celui-ci p> et j'aimerais que l'algorithme soit boucler dans la matrice et saisissez l'identifiant dans l'ordre croissant en fonction des positions, naturellement je voudrais faire Quelque chose avec l'identifiant que je reçois dans la boucle, je pourrais donc avoir une sorte de boucle et dans la boucle d'impression 2) pense à cela comme un scénario différent, mais en utilisant la même structure de données qu'avant p> et je sors de l'objet avec id orange afin il ressemble à ceci p> mais maintenant les positions n'ont pas de sens car il y a 0 -> 2 -> 3 -> 4 mais pas de position 1, donc je voudrais Pour les remettre dans une ordonnance ascendante appropriée (il doit contenir la même séquence, il doit donc continuer à faire pomme -> banane -> mangue -> raisin) de sorte qu'il se transforme en p> Remarque: il pourrait y avoir un scénario où je dois sortir plus d'un objet, mais je suppose que cela n'a pas d'importance car je ne peux que le faire de manière séquentielle ou quelque chose. < / p> merci! p> p> 'j'ai mangé' + id code> de sorte qu'il sortirait comme p>
3 Réponses :
Vous pouvez le faire avec Trier et carte
P>
let arr = [{id: 'apple', position: 2},{id: 'orange', position: 0},{id: 'banana', position: 1}];
let op = arr.sort((a,b)=> a.position-b.position).map(e=> `I ate ${e.id}`);
console.log(op)
Pourquoi utiliser mapper () code> ici et créer un tout nouveau tableau si op veut simplement imprimer la phrase "j'ai mangé {id}"? Il y aurait moins de frais généraux avec une simple itération de la matrice triée via foreach () code>.
@Benbeck "L'optimisation prématurée est la racine de tout mal" i> :)
j'ai cassé ceci dans
p>
const fruit = [{id: "apple", position: 0},{id: "banana", position: 2}, {id: "grape", position: 4}, {id: "mango", position: 3}];
// 1. Sort the fruit by position
fruit.sort((a, b) => a.position - b.position);
console.log(fruit)
// 2. Recalculate position
fruit.forEach((o, idx) => {
o.position = idx;
});
console.log(fruit)
// 3. Work with the sorted fruit
console.log(fruit.map(({ id }) => `I ate ${id}`))C'est parfait, j'ai eu des boucles à l'intérieur des boucles et c'était juste un gâchis. Totalement oublié, j'ai eu ces fonctions disponibles, merci!
amm..too tard pour poster! Mais j'espère que cela peut aider les autres! "vrai" data-babel = "faux">
var arr = [{
id: 'apple',
position: 0
}, {
id: 'banana',
position: 2
}, {
id: 'grape',
position: 4
}, {
id: 'grapeeee',
position: 5
}]
var old = 0,
next = 1;
arr.sort(function(a, b) {
if (old != a.position) {
a.position = old;
}
if (next != b.position) {
b.position = next;
}
var keyA = a.position,
keyB = b.position;
console.log(keyA, "--", keyB)
old++;
next++;
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
console.log("arr--", arr);
for (var i = 0; i < arr.length; i++) {
console.log("I ate ", arr[i].id)
}
Merci pour la question. S'il vous plaît prendre un moment pour partager avec nous ce que vous avez déjà essayé. Nous sommes ici pour vous aider à déboguer du code existant, mais votre question pourrait être satisfaite de la négativité, car vous demandez une solution de programmation sans faire de votre propre effort.
Pourquoi ne pas simplement utiliser quelque chose d'appartienne à Array.ProTotype .sort () ?