2016-06-22 6 views
0

ich haben Javascript wie:javascript Liste Wert Iteration bestimmten Index hin und her

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) 

Hier index = [2, 3] ist der Index des data i. e. ball and dog und to ist die target wo ich den index Wert setzen möchte.

Ich möchte setzen index ich. e ball and dog nach fish.

Der obige Code gibt das genaue Ergebnis und wurde von einem Benutzer von SO geholfen.

Aber wenn ich Index-Wert auf index = [4, 5] und to = 2 setzen. Es gibt mir einen Fehler. Es platziert die elephant und fish nach cat nicht.

Ich habe ein anderes Programm geschrieben, um diese wie zu handhaben:

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) 

Dieser Code gibt Ergebnis für index = [4, 6] oder index = [3, 6] und to = 2 aber nicht für wie index=[4, 5] und to = 2

+1

'[2,3]' ist 'cat' und' dog' nicht 'ball' und' dog' – fuzz

+0

@gotnull leider das war Typo – gamer

Antwort

1

keine elegante Lösung, wie weit der Algorithmus betroffen ist, aber es macht den Job. Sagen Sie mir, wenn Sie etwas falsch finden

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

Das auf alle Fälle funktioniert. Stellen Sie bei Bedarf Fragen.

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

Hmm, ich obwohl es eine Reihe repräsentiert. Ich muss es korrigieren. -> DONE –

+0

Funktioniert immer noch nicht für Fälle wie: 'index = [0, 4, 5];' Ich werde es morgen überprüfen. Fast 2 Uhr morgens. –

+0

Schließlich reparierte ich vor dem Schlafengehen. –

0

Dies funktioniert in allen Fällen. Versuch es.

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); 
Verwandte Themen