2016-11-01 5 views
0

Hier ist meine Funktion:Wie wird mein Array, das ich nicht verwende, aktualisiert?

function RemoveOutputKeys(array){ 
    var temp = array; 
    for(var object in temp){ 
    delete temp[object]['statusCode'] 
    delete temp[object]['statusResponse'] 
    } 
    console.log(array) 
    if(temp == array) 
    console.log("how is this possible?!?!!?!?!") 
    return temp 
} 

und hier ist der Eingang I bereitstellt bin,

array = [{'statusCode':400},{'statusCode':200}] 

Es macht Sinn für temp aktualisiert werden, aber ich will nicht die array aktualisiert. Wie kann ich dieses Problem beheben?

Dank

+3

'var temp = Array;' kein neues Array machen. Du arbeitest immer noch an 'array'. – user2357112

+1

Verwenden Sie 'for (... in ...)' nicht, um Arrays zu iterieren – MinusFour

+0

Außerdem ist 'if (temp == array)' ein Objektidentitätsvergleich, kein Wertvergleich. – user2357112

Antwort

0

Wenn Sie anstelle von Alias ​​/ Referenz Verwendung neues Array erstellen möchten:

var newArray = oldArray.slice(); 
1

Verwenden Array.prototype.filter() statt in

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Die Methode filter() erstellt ein neues Array mit allen Elementen, die den von der bereitgestellten Funktion implementierten Test bestehen.

function RemoveOutputKeys(array) { 
    return array.filter(function(myArray) { 
     if (!myArray['statusCode'] && !myArray['statusResponse']) { 
      return myArray; 
     } 
    }); 
} 

var originalArray = [{'statusCode':400}, {'statusCode':200}, {'test': 'test'}]; 

var tempArray = RemoveOutputKeys(originalArray); 

console.log(originalArray, tempArray); 

https://jsfiddle.net/3kbypvcs/2/

Verwandte Themen