2017-07-13 6 views
1

Der folgende Codeausschnitt zeigt, dass Arrays wie Referenzen wirkenWelche Regeln gelten für eine Array-Referenz?

let arr = [1,2,3] 
let arr2 = arr 


arr[0] = 5 


console.log(arr2) // [5, 2, 3] 
console.log(arr) // [5, 2, 3] 

aber wenn ich eine Map-Funktion verwenden, um ein Array zu bearbeiten:

let arr = [1,2,3] 
let arr2 = arr 

arr = arr.map(x => x * 2) 

console.log(arr2) //[ 1, 2, 3 ] 
console.log(arr) //[ 2, 4 ,6 ] 

Es ist nicht als Referenz dienen. Ich erwarte, dass es so verhalten:

let arr = [1,2,3] 
let arr2 = arr 

function doubleNumbers(numbers){ 
    for (let i = 0; i < numbers.length; i++) { 
    numbers[i] = numbers[i] * 2 
    } 
    return numbers 
} 

arr = doubleNumbers(arr) 

console.log(arr2) //[ 2, 4 ,6 ] 
console.log(arr) //[ 2, 4 ,6 ] 

Haben die .map.filter.reduce.forEach Funktionen eine flache Kopie des Arrays zu erstellen, wenn mit ihr arbeitet, dass die Rückkehr?

+0

[aus dem MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map): Die Methode map() erstellt ein neues Array mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element im aufrufenden Array. –

+1

Lesen Sie die Dokumentation – Weedoze

Antwort

0

Die Methode map() erstellt und gibt ein neues Array mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element im aufrufenden Array zurück.

let arr = [1,2,3] 
let arr2 = arr 

arr = arr.map(x => x * 2) 

Hier sind arr und arr2 zwei verschiedene Arrays.

0
  1. Karte das neue Array erstellen, so dass Sie nach der Karte zuordnen konnte arr2= arr

let arr = [1,2,3] 
 

 
arr = arr.map(x => x * 2) // return with new array 
 

 
var arr2 = arr //declare only after map other wise its target the old 
 

 
console.log(arr2) //[ 1, 2, 3 ] 
 
console.log(arr) //[ 2, 4 ,6 ]

0

Array.prototype.map nicht die Anordnung an Ort und Stelle ändern. Stattdessen projiziert es mithilfe der bereitgestellten Methode Elemente in ein neues Array. Um zu verstehen, warum es das tut, was es tut, man könnte es brechen in eine Implementierung:

Array.prototype.map = function (projection) { 
    var mapped = []; // New array 
    for(var i = 0; i < this.length; i++) { 
     mapped.push(projection(this[i]); // Project item into new array 
    } 

    return mapped; // Return new array 
    } 

Hinweis, wie die Elemente des ursprünglichen Arrays werden nicht geändert. Die Zuordnungsmethode folgt funktionalen Programmierparadigmen, indem die Elemente des Arrays und des Arrays selbst unveränderbar bleiben und die ursprünglichen Daten in eine neue Sammlung transformiert werden.

Verwandte Themen