var points = [2, a, t, 5, 4, 3]; et après le tri: var points = [2, a, t, 3, 4, 5];
Avez-vous de l'aide à ce sujet? il est possible de poster votre aide avec du code javascript ancien car je travaille sur un projet Adobe DC?
mon code est là:
var points = [t1, t2, t3, t4]; [t1, t2, t3, t4] = points; var lucky = points.filter(function(number) { return isNaN(number) == false && number !=="" && number!== undefined; }); points=lucky points.sort(function(a, b){return a - b}); this.getField("Text6").value = points
mais ceci uniquement trier min à max et filtrer les autres caractères ... j'ai besoin de garder d'autres caractères et de ne raccourcir que les nombres ...
4 Réponses :
var points = [2, "a", "t", 5, 4, 11, "", 3]; var insert = points.slice(0); // Clone points // Remove all elements not a number points = points.filter(function(element) { return typeof element === 'number'; }); // Sort the array with only numbers points.sort(function(a, b) { return a - b; }); // Re-insert all non-number elements insert.forEach(function(element, index) { if (typeof element !== 'number') { points.splice(index, 0, element); } }); console.log(points);
Agréable. En fait, cela ressemble à une bonne question d'entretien à utiliser à l'avenir étant donné le nombre de répondants (moi y compris) qui se sont trompés
Je suis d'accord @pete, c'est d'une simplicité trompeuse.
Pourquoi utilisé uniquement sort ()
cela ne fonctionnera pas pour des nombres plus grands.
@Armel un bogue que j'ai trouvé est à court et "" valeurs ... et ne pas garder est la position de la table comment résoudre ce problème?
@MaheerAli Vous avez raison, j'ai ajouté une fonction de comparaison dans le sort ()
.
@hackertom J'ai résolu le problème avec les chaînes vides ""
, merci.
filter ()
nombres hors du tableau. Ensuite, sort ()
, puis parcourez un tableau réel. Et vérifiez si la valeur est Number
changez-la en premier élément du tableau trié. Et supprimez le premier élément de sortedArr
let arr = [5, 't', 's', 2,3,4]; let sortedNums = arr.filter(x => typeof x === 'number').sort((a,b) => a-b); arr.forEach((a,i) => { if(typeof a === 'number'){ arr[i] = sortedNums[0] sortedNums.shift(); } }) console.log(arr)
@MarkMeyer 🤦♂️ Vrai
Vous pourrez peut-être le faire plus efficacement en évitant splice ()
si vous réaffectez simplement les valeurs en place.
Filtrer, trier, réassigner pour trier les nombres en place:
let arr = ['c', 2, 'a', 't', 5, 4, 3, 'b', 1] let n = arr.filter(c => typeof c == "number").sort((a, b) => a-b) for (let i = 0, c=0; i<arr.length; i++){ if (typeof arr[i] == "number") arr[i] = n[c++] } console.log(arr)
J'aime votre solution condensée mais j'ai gardé quelque chose d'un peu plus verbeux et moins ES6. Je suppose que cela dépend de ce que vous recherchez;) Merci.
Ce qui suit doit donner la sortie exacte compte tenu de votre entrée:
var result = [2, 'a', 't', 5, 4, 3].reduce( function(result,item){ return !isNaN(item)&&item!=='' ? typeof (result[result.length-1] && result[result.length-1].push) === 'function' ? (result[result.length-1].push(item),result) : result.concat([[item]]) : result.concat(item) }, [] ).map( function(item){ return typeof item.sort === 'function' ? item.sort(function(a,b){return a-b}) : item } ).reduce( function(result,item){ return result.concat(item) },[] ); console.log(result);
La façon dont j'ai lu la question était de trier tous les nombres en un seul groupe plutôt que de trier les sous-groupes de nombres. Par exemple, la sortie attendue de [2, 'a', 't', 5, 4, 3, 1]
serait [1, 'a', 't', 2 , 3, 4, 5]
. Le code ci-dessus renvoie [2, 'a', 't', 1, 3, 4, 5]
.
@MarkMeyer pourrait aussi être le cas
Bienvenue à SO. L'idée est que vous montrez ce que vous avez essayé, puis nous vous aidons.
sans afficher le code, je pourrais suggérer d'épisser le tableau, de le trier séparément puis de le combiner