按索引

时间:2018-04-11 18:33:39

标签: javascript algorithm

我一直在努力解决这个问题。我有一个看起来像这样的对象列表。根据索引位置向数组添加元素。

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

因此,如果A被推入数组内部,它将占据数组索引位置0.但是,当B被推入数组时,它将接管索引位置。 [B,A]等。它有点像先进入,先出来,除了向左移动。但是,我想做这样的事情。 [B,A,C],我想将D添加到C的索引位置。[B,A,D,C]。 A位于索引位置1.我想将E插入索引1. [B,E,A,D,C]

3 个答案:

答案 0 :(得分:3)

  function insert(array, el) {
     let pos = 0;
     while(array[pos].index < el.index) pos++;
     array.splice(pos, 0, el);
  }

只需插入排序并使用splice添加元素。

答案 1 :(得分:2)

您可以简单地拼接数组,以便在想要的索引处添加对象。

&#13;
&#13;
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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用函数splice并检查要插入特定位置的索引属性。

如果index属性不存在,请在最后按对象。

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; }