2016-06-22 3 views
0

У меня есть JavaScript, как: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 я. е. ball and dog и to - это target, где я хочу разместить значение index.

Я хочу положить index i. e ball and dog после fish.

Приведенный выше код дает точный результат и помог пользователю из 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

+1

'[2,3]' 'является cat' и' 'dog' не ball' и' dog' – fuzz

+0

@gotnull жаль, что была опечатка – gamer

ответ

1

Не элегантное решение, насколько алгоритм обеспокоен, но это делает работу. Сообщите мне, если вы обнаружили что-то не так

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); 
+0

Nice work man ... – gamer

0

Это будет работать на всех случаях. Если необходимо, задайте любые вопросы.

var data = ["apple", "ball", "cat", "dog", "elephant", "fish", "gorilla"]; 
 
var index = [0,4,6]; // elephant and fish 
 
var to = 2; // cat 
 
var offset = 0; 
 
var change = (to < index[0] ? 1 : 0); 
 

 
console.log(data); 
 
for(var i = 0; i < index.length; i++) { 
 
    var key = index[i]; 
 
    data.splice((to+1), 0, data[key + offset]); 
 
    delete data[key + offset + (to < key ? 1 : 0)]; 
 
    to++; 
 
    offset += ((to+1) < key ? 0 : 1); 
 
} 
 
data = data.filter(function(val){ return val != undefined }); 
 
console.log(data);

+0

Хм, хотя он представлял диапазон. Я должен это исправить. -> DONE –

+0

Все еще не работает для таких случаев, как: 'index = [0, 4, 5];' Я проверю это завтра. Здесь почти 2 часа. –

+0

Наконец, я исправил перед сном. –

0

Это работает во всех случаях. Попробуй.

var data = ["apple", "ball", "cat", "dog", "elephant", "fish", "gorilla"]; 
var index = [0,4,5]; 
var to = 2; 
var arrTemp = []; 
data.forEach(function(val,key){ 
    if(index.indexOf(key)!=-1){ 
    data.splice(key,1); 
    data.splice(to>key?(to):(to+1),0,val); 
    to>key?to:to++; 
    } 
}); 
data = data.filter(function(val){ return val != undefined }); 
console.log(data); 
Смежные вопросы