0
votes

Impossible de trier les tableaux en JavaScript

J'essaie d'imprimer les éléments uniques dans un tableau suivi d'abord par une autre itération à l'aide de DO-While

p>

var arr1 = ['a1','a2','a3,' ,'b1', 'b2' , 'c1' , 'c2'];
var arr2 = [];
var userInput = 7;
do{
    for (var i =0; i < arr1.length; i++)
        {
            if (arr2.indexOf(arr1[i]) == -1 ))
            {
                    arr2.push(arr1[i]);

                if (arr2.length == userInput)
                    {
                        break;
                    }

            }
}
}while (arr2.length == userInput);
console.log(arr2)
//output = ["a1", "a2", "a3,", "b1", "b2", "c1", "c2"]
//expected output = ["a1", "b1", "c1,", "a2", "b2", "c2", "a3"]


3 commentaires

La chose est que vous n'avez aucune condition de tri, vous ne faites que copier des matrices.


Plus, "A3" <"B1" en JavaScript, vous allez donc avoir à analyser les chaînes et à coder une comparaison personnalisée pour obtenir votre sortie attendue.


Devez-vous utiliser en boucle? Il y a de meilleures façons de le faire


3 Réponses :


0
votes

La méthode de tri spécifie une fonction qui définit l'ordre de tri. Si vous le triez en fonction du deuxième caractère (la valeur numérique), les lettres seront les seconds critères de tri par défaut.

var arr1 = ['a1','a2','a3,' ,'b1', 'b2' , 'c1' , 'c2'];
var arr2 = [];

console.log(arr1.sort((a,b) => a[1]-b[1]));


8 commentaires

Où est arr2 comme sortie? Où affecte la variable d'entrée sur le tableau résultant?


@Aksenp Vous n'avez pas nécessairement besoin d'ARR2, car la méthode de tri change le tableau d'origine.


@msanford Merci pour le commentaire, j'ai ajouté une explication.


@Addis Merci pour la réponse. Voyez-vous un problème qui tente de spécifier l'élément unique dans l'itération ultérieure à l'aide d'index de et simplement de pousser l'élément dans la nouvelle matrice?


@Saurabhkothari, il n'y a pas de fausse tentative d'appuyer sur des éléments spécifiques, c'est juste que vous ne faites aucune sorte de tri, vous appuyez simplement sur tous les éléments dans le deuxième tableau.


@Addis merci! Je le pousse aussi longtemps que l'indexof retour -1 et l'arrondi == UserInput Valeur Je ne sais pas pourquoi la condition si elle ne fonctionnera pas!


@Saurabhkothari Quelle ligne de code Pensez-vous faire le tri? "Index of Retour -1" -Quelle Cette ligne de code est que, il vérifie si un élément est déjà poussé vers ARR2, s'il n'en est pas encore, l'index sera de -1 afin que l'élément soit poussé. Si l'élément existe déjà sur l'index de retournera l'indice réel différent de -1 de sorte que la déclaration IF ne sera pas exécutée.


Donc, la condition si fonctionne réellement, il ne fait pas de faire une action significative. Outre si vous aviez des répétitions dans votre tableau, vous n'obtiendrez même pas les éléments d'origine. Mais ma question à nouveau est que, dans votre code, le tri est-il en train de faire le tri ??



1
votes

Vous pouvez prendre la partie de non numéro un numéro de numéro comme une matrice et trier

  1. par la partie numéro et li>
  2. par la partie non numéro. li> OL>

    Ceci fonctionne aussi bien pour les chaînes telles que 'FOO42' CODE>. P>

    p>

    var array = ['a1', 'a2', 'a3', 'b1', 'b2', 'c1', 'c2'];
    
    array.sort((a, b) => {
        var aa = a.match(/(\D+)(\d+)/).slice(1),
            bb = b.match(/(\D+)(\d+)/).slice(1);
    
        return aa[1] - bb[1] || aa[0].localeCompare(bb[0]);
    });
    
    console.log(array);


2 commentaires

Merci pour votre réponse. J'essaie de charger l'équilibre des éléments à l'aide de l'index lui-même.


Qu'est-ce que cela signifie dans ce contexte?



0
votes

Que diriez-vous:

p>

//original array
var arr = ['a1', 'a2', 'a3,', 'b1', 'b2', 'c1', 'c2'];

//original array, sorted
var sorted = arr.sort();

//set, to get only unique elements
var set = new Set(sorted);

//set expanded to get array, might use it without this
var result = [...set];

console.log(result);


1 commentaires

Hé, j'ai converti le bloc de code en un extrait de sorte qu'il soit dirigé. Solution intéressante, j'aime ensemble () .