J'ai essayé de résoudre ce programme. J'ai une liste d'objets qui ressemblent à ceci. Ajout d'éléments à un tableau en fonction de leur position d'index.

let A = {index: 0} 
let B = {index: 0} 
let C = { index: 2} 
let D = {index: 2} 
let E = { index: 1}

Donc, si A est poussé à l'intérieur du tableau, il prend la position d'index du tableau 0. Cependant, lorsque B est poussé dans le tableau, il reprend la position d'index. [B, A], etc. C'est un peu comme entrer, sortir, sauf se déplacer vers la gauche. Cependant, je veux faire quelque chose comme ça. [B, A, C], je veux ajouter D à la position d'index de C. [B, A, D, C]. A est à la position d'index 1. Je veux insérer E dans l'index 1. [B, E, A, D, C]

2
spaceDog 11 avril 2018 à 21:33

3 réponses

Meilleure réponse

Vous pouvez simplement épisser le tableau pour ajouter un objet à l'index souhaité.

var a = { index: 0, value: 'a' },
    b = { index: 0, value: 'b' },
    c = { index: 2, value: 'c' },
    d = { index: 2, value: 'd' },
    e = { index: 1, value: 'e' },
    array = [];

function add(array, object) {
    array.splice(object.index, 0, object);
}

add(array, a);
add(array, b);
add(array, c);
add(array, d);
add(array, e);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Nina Scholz 11 avril 2018 à 18:46

Vous pouvez utiliser la fonction splice et vérifier l'attribut d'index à insérer à une position spécifique.

Si l'attribut d'index n'existe pas, poussez l'objet à la fin.

var decorate = (arr) => {
  arr.insertByIndex = (...objs) => {
    objs.forEach(obj => {
      if (!isNaN(obj.index)) arr.splice(obj.index, 0, obj);
      else arr.push(obj);
    });
  }
  
  return arr;
};

let A = {index: 0, desc: 'A'};
let B = {index: 0, desc: 'B'};
let C = {index: 2, desc: 'C'};
let D = {index: 2, desc: 'D'};
let E = {index: 1, desc: 'E'};

var array = decorate([]);
array.insertByIndex(D, A, C, B, E);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Ele 11 avril 2018 à 19:23
  function insert(array, el) {
     let pos = 0;
     while(array[pos].index < el.index) pos++;
     array.splice(pos, 0, el);
  }

Effectuez simplement le tri par insertion et utilisez splice pour ajouter l'élément.

3
Jonas Wilms 11 avril 2018 à 18:38