recherche

Maison  >  Questions et réponses  >  le corps du texte

sort - javascript spécifie manuellement l'ordre d'un tableau d'objets

J'ai un tableau d'objets. Je veux qu'il soit disposé dans l'ordre que j'ai spécifié. Comme suit, il est disposé dans l'ordre des noms que j'ai spécifié. Je vais utiliser la méthode suivante pour le faire uniquement avec du JavaScript natif. existe-t-il du lodash ou d'autres méthodes ? Des packages bien connus de trois parties peuvent-ils obtenir les effets suivants, ou existe-t-il d'autres moyens plus efficaces et plus simples de les écrire ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<code>

var arr = [

    {

        name:'小麦',

        phone:'112233'

    },

    {

        name:'绿绿',

        phone:'4445566'

    },

    {

        name:'增增',

        phone:'321321'

    },

    {

        name:'弱弱',

        phone:'123123'

    }

];

 

//希望达到的顺序 (我已知所有元素)

var order = {

    '增增':0,

    '弱弱':1,

    '绿绿':2,

    '小麦':3

};

 

var newOrderedArr = [];

 

arr.forEach((element)=>{

    newOrderedArr[order[element.name]] = element;

});

 

console.log(newOrderedArr);</code>

Les résultats de la console sont les suivants

1

2

3

4

<code>[ { name: '增增', phone: '321321' },

  { name: '弱弱', phone: '123123' },

  { name: '绿绿', phone: '4445566' },

  { name: '小麦', phone: '112233' } ]</code>

淡淡烟草味淡淡烟草味2804 Il y a quelques jours733

répondre à tous(2)je répondrai

  • 黄舟

    黄舟2017-06-28 09:29:54

    Si orders 里面是按 0 ~ n a des valeurs continues, alors votre méthode est déjà très, très rapide, et les autres méthodes de la bibliothèque ne peuvent pas atteindre cette vitesse (car elles considéreront des situations discontinues)

    S'ils ne sont pas continus, vous pouvez utiliser le tri

    1

    <code class="js">newOrderedArr = arr.sort((a, b) => order[a.name] - order[b.name]);</code>

    Ou vous pouvez utiliser votre méthode et ajouter un filtre

    1

    <code class="js">newOrderedArr = newOrderedArr.filter(n => n);</code>

    Supplément : Pour le cas de numéros de série non consécutifs, la comparaison sans tri est comme indiqué sur la figure

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-28 09:29:54

    Cette idée semble être très rapide. Du point de vue de la facilité d'utilisation, l'index de commande peut être généré de manière à pouvoir saisir à chaque fois un tableau de noms.

    Mais pas s'il y a des noms en double. Vous devez conserver un enregistrement de tableau pour chaque nom et enfin le concaténer

    répondre
    0
  • Annulerrépondre