我有一个像这样的JavaScript:
var data = ["apple", "ball", "cat", "dog", "elephant", "fish", "gorilla"]
var index = [2, 3] // cat and dog
var to = 5 // fish
var arrTemp = [];
data.forEach(function(val,key){
if(index.indexOf(key)!=-1){
data.splice((to+1),0,data[key]);
to++;
delete data[key];
}
})
data = data.filter(function(val){ return val != undefined });
console.log(data)
这里index = [2, 3]
是data
i的索引。 e. ball anddog
和 to
是我想要放置 index
值的 target
。
我想把索引
i。 鱼
之后的球和狗
。
上面的代码给出了准确的结果,并得到了 SO 用户的帮助。
但是当我将索引值设置为 index = [4, 5]
和 to = 2
时。它给了我错误。它不会将 elephant
和 fish
放在 cat
之后。
我编写了另一个程序来处理这个问题,例如:
var data = ["apple", "ball", "cat", "dog", "elephant", "fish", "gorilla"]
var index = [4, 5] // elephant and fish
var to = 2 // cat
var offset = 0
data.forEach(function(val,key){
if(index.indexOf(key)!=-1){
data.splice((to+1), 0, data[key + offset]);
to++;
offset++;
var del_key = key + offset
delete data[del_key];
}
});
console.log(data)
此代码给出了 index = [4, 6]
或 index = [3, 6]
和 to = 2
的结果,但不是对于像 index=[4, 5]
和 to = 2
请您参考如下方法:
就算法而言,这不是一个优雅的解决方案,但它可以完成工作。如果您发现任何问题请告诉我
var data = ["apple", "ball", "cat", "dog", "elephant", "fish", "gorilla"]
var index = [0, 4, 5]
var to = 2;
var i =0;
var stringatTo = data[to];
var temp =[];
for (var k = 0; k < index.length; k++) {
temp[k] = data[index[k]];
}
for (var k = 0; k < index.length; k++) {
data.splice(data.indexOf(temp[k]),1);
}
var curindex = data.indexOf(stringatTo);
for (var j = 0; j < temp.length; j++) {
data.splice(curindex+1+j,0,temp[j]);
}
console.log(data);