我一直在努力解决这个问题。我有一个看起来像这样的对象列表。根据索引位置向数组添加元素。
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]
答案 0 :(得分:3)
function insert(array, el) {
let pos = 0;
while(array[pos].index < el.index) pos++;
array.splice(pos, 0, el);
}
只需插入排序并使用splice
添加元素。
答案 1 :(得分:2)
您可以简单地拼接数组,以便在想要的索引处添加对象。
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;
答案 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; }