Ich möchte ein zweidimensionales Array in Javascript erstellen, in dem ich die Koordinaten (x, y) speichern werde. Ich weiß noch nicht, wie viele Koordinatenpaare ich haben werde, da sie durch Benutzereingaben dynamisch generiert werden.
Beispiel für ein vordefiniertes 2d-Array:
var Arr=[[1,2],[3,4],[5,6]];
Ich denke, ich kann die PUSH-Methode verwenden, um am Ende des Arrays einen neuen Datensatz hinzuzufügen.
Wie deklariere ich ein leeres zweidimensionales Array, damit es bei Verwendung meines ersten Arr.push () zum Index 0 hinzugefügt wird und jeder nächste durch Push geschriebene Datensatz den nächsten Index erhält?
Dies ist wahrscheinlich sehr einfach, ich bin nur ein Neuling bei JS, und ich würde mich freuen, wenn jemand einen kurzen Arbeitscode-Ausschnitt schreiben könnte, den ich untersuchen könnte. Vielen Dank
var Arr = new Array(new Array());
? Und ja,push
undpop
hinzufügen oder Elemente aus dem Ende des Arrays entfernen, währendshift
undunshift
entfernen oder Elemente am Anfang des Arrays hinzuzufügen.Antworten:
Sie können ein reguläres Array einfach wie folgt deklarieren:
var arry = [];
Wenn Sie dann zwei Werte zum Array hinzufügen möchten, müssen Sie lediglich Folgendes tun:
Und ja, beim ersten Aufruf
arry.push
wird das Wertepaar auf den Index 0 gesetzt.Aus der nodejs-Antwort:
> var arry = []; undefined > arry.push([1,2]); 1 > arry [ [ 1, 2 ] ] > arry.push([2,3]); 2 > arry [ [ 1, 2 ], [ 2, 3 ] ]
Da Javascript dynamisch typisiert wird, gibt es natürlich keine Typprüfung, die erzwingt, dass das Array zweidimensional bleibt. Sie müssen sicherstellen, dass Sie nur Koordinatenpaare hinzufügen und nicht Folgendes tun:
> arry.push(100); 3 > arry [ [ 1, 2 ], [ 2, 3 ], 100 ]
quelle
Wenn Sie zusammen mit der Erstellung initialisieren möchten, können Sie Füllen und Zuordnen verwenden .
const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));
5 ist die Anzahl der Zeilen und 4 ist die Anzahl der Spalten.
quelle
map(() => {})
eine eigenständige Zeile erstellt wird und dies erforderlich ist. Der Wegnew Array(5).fill(new Array(4).fill(0))
ist ein sehr gefährlicher Schachzug. Da alle Zeilen mit Verweisen auf EIN Array gefüllt sind, wird beim Aktualisieren aucharr[0][0]
der Wert vonarr[1][0]
geändert. Dies kann zu sehr schwerwiegenden und dunklen Problemen führen, wenn Sie dieses Array als Cache-Tabelle verwenden.new Array(5)
) und es mit einem neu erstellten Array (new Array(4)
) füllen ?! Bedeutet das nichtnew Array()
, dass Sie kein neues Array mehr erstellen?! Was ist los mit JS?!ES6
Matrix
m
mit Zeilen und 5 Spalten der Größe 3 (entfernen,.fill(0)
um nicht um Null zu initiieren)[...Array(3)].map(x=>Array(5).fill(0))
Code-Snippet anzeigen
let Array2D = (r,c) => [...Array(r)].map(x=>Array(c).fill(0)); let m = Array2D(3,5); m[1][0] = 2; // second row, first column m[2][4] = 8; // last row, last column // print formated array console.log(JSON.stringify(m) .replace(/(\[\[)(.*)(\]\])/g,'[\n [$2]\n]').replace(/],/g,'],\n ') );
quelle
Wenn Sie in der Lage sein möchten, auf die Matrix wie folgt zuzugreifen, Matrix [i] [j]
Ich finde es am bequemsten, es in einer Schleife zu initiieren.
var matrix = [], cols = 3; //init the grid matrix for ( var i = 0; i < cols; i++ ) { matrix[i] = []; }
dies wird dir geben [[], [], []]
Daher gibt Matrix [0] [0] Matrix [1] [0] undefiniert zurück und nicht den Fehler "Nicht erfasster Typfehler: Eigenschaft '0' von undefiniert kann nicht festgelegt werden."
quelle
Sie können ein Array mithilfe der Kurzschrift-Syntax in einem anderen verschachteln:
var twoDee = [[]];
quelle
Sie können so etwas ausprobieren: -
var arr = new Array([]);
Daten pushen:
arr[0][0] = 'abc xyz';
quelle
arr[1][0]=3
=>Uncaught TypeError: Cannot set property '0' of undefined
Ein leeres Array wird definiert, indem Werte wie folgt weggelassen werden:
v=[[],[]] a=[] b=[1,2] a.push(b) b==a[0]
quelle
Sie können ein Array mit Arrays füllen, indem Sie eine Funktion verwenden:
Das Ergebnis ist:
quelle
Erstellen Sie ein Objekt und verschieben Sie dieses Objekt in ein Array
var jSONdataHolder = function(country, lat, lon) { this.country = country; this.lat = lat; this.lon = lon; } var jSONholderArr = []; jSONholderArr.push(new jSONdataHolder("Sweden", "60", "17")); jSONholderArr.push(new jSONdataHolder("Portugal", "38", "9")); jSONholderArr.push(new jSONdataHolder("Brazil", "23", "-46")); var nObj = jSONholderArr.length; for (var i = 0; i < nObj; i++) { console.log(jSONholderArr[i].country + "; " + jSONholderArr[i].lat + "; " + jSONholderArr[i].lon); }
quelle
const grid = Array.from(Array(3), e => Array(4));
Array.from(arrayLike, mapfn)
mapfn
wird aufgerufen, der Wert übergebenundefined
, zurückgegebennew Array(4)
.Ein Iterator wird erstellt und der
next
Wert wird wiederholt aufgerufen. Der zurückgegebene Wert vonnext
,next().value
istundefined
. Dieser Wertundefined
wird dann an den Iterator des neu erstellten Arrays übergeben. Jede Iterationvalue
istundefined
, was Sie sehen können, wenn Sie sie protokollieren.var grid2 = Array.from(Array(3), e => { console.log(e); // undefined return Array(4); // a new Array. });
quelle
Ich weiß, dass dies ein alter Thread ist, aber ich würde
array of objects
eher vorschlagen, einen als einen zu verwendenarray of arrays
. Ich denke, es macht den Code einfacher zu verstehen und zu aktualisieren.// Use meaningful variable names like 'points', // anything better than a bad pirate joke, 'arr'! var points = []; // Create an object literal, then add it to the array var point = {x: 0, y: 0}; points.push(point); // Create and add the object to the array in 1 line points.push({x:5, y:5}); // Create the object from local variables var x = 10; var y = 8; points.push({x, y}); // Ask the user for a point too var response = prompt("Please enter a coordinate point. Example: 3,8"); var coords = response.split(",").map(Number); points.push({x: coords[0], y: coords[1]}); // Show the results var canvas = document.getElementById('graph'); var painter = canvas.getContext("2d"); var width = canvas.width, height = canvas.height; var scale = 10, radius = 3.5, deg0 = 0, deg360 = 2 * Math.PI; painter.beginPath(); for (var point of points) { var x = point.x * scale + scale; var y = height - point.y * scale - scale; painter.moveTo(x + radius, y); painter.arc(x, y, radius, deg0, deg360); painter.fillText(`${point.x}, ${point.y}`, x + radius + 1, y + radius + 1); } painter.stroke();
<canvas id="graph" width="150" height="150" style="border: 1px solid red;"></canvas>
quelle
Was ist falsch mit
var arr2 = new Array(10,20); arr2[0,0] = 5; arr2[0,1] = 2 console.log("sum is " + (arr2[0,0] + arr2[0,1]))
sollte auslesen "Summe ist 7"
quelle
arr2[1,0]=4
.console.log("sum is " + (arr2[0,0] + arr2[0,1]))
dann gibt "Summe ist 6". Sie haben nicht wirklich ein zweidimensionales Array erstellt, sondern ein einfaches Array mit den Einträgen "10" und "20". Wenn Sie versuchen, mit durch Kommas getrennten Indizes auf Einträge zuzugreifen, wird hier wirklich beschrieben, was Sie wirklich tun: stackoverflow.com/questions/7421013/…Wenn wir ES2015 nicht verwenden und fill () nicht haben, verwenden Sie einfach
.apply()
Siehe https://stackoverflow.com/a/47041157/1851492
let Array2D = (r, c, fill) => Array.apply(null, new Array(r)).map(function() {return Array.apply(null, new Array(c)).map(function() {return fill})}) console.log(JSON.stringify(Array2D(3,4,0))); console.log(JSON.stringify(Array2D(4,5,1)));
quelle
Sie müssen nicht so viel Ärger machen! Es ist einfach
Dadurch wird eine 2 * 3-String-Matrix erstellt.
var array=[]; var x = 2, y = 3; var s = 'abcdefg'; for(var i = 0; i<x; i++){ array[i]=new Array(); for(var j = 0; j<y; j++){ array[i].push(s.charAt(counter++)); } }
quelle
var arr = []; var rows = 3; var columns = 2; for (var i = 0; i < rows; i++) { arr.push([]); // creates arrays in arr } console.log('elements of arr are arrays:'); console.log(arr); for (var i = 0; i < rows; i++) { for (var j = 0; j < columns; j++) { arr[i][j] = null; // empty 2D array: it doesn't make much sense to do this } } console.log(); console.log('empty 2D array:'); console.log(arr); for (var i = 0; i < rows; i++) { for (var j = 0; j < columns; j++) { arr[i][j] = columns * i + j + 1; } } console.log(); console.log('2D array filled with values:'); console.log(arr);
quelle
Einzeilige Lösung:
var x = 3, y = 4; var ar = new Array(x).fill(new Array(y).fill(0));
Es wird ein Matrixarray mit Werten = 0 erstellt
quelle
ar[1][2] = 1
jede Zeile[0, 0, 1, 0]
.Wir kennen normalerweise die Anzahl der Spalten, aber möglicherweise nicht die Zeilen (Datensätze). Hier ist ein Beispiel für meine Lösung, bei der ein Großteil der oben genannten Funktionen verwendet wird. (Für diejenigen, die hier mehr Erfahrung mit JS haben als ich - so ziemlich jeder - sind Vorschläge zur Codeverbesserung willkommen.)
var a_cols = [null,null,null,null,null,null,null,null,null]; var a_rxc = [[a_cols]]; // just checking var arr = a_rxc.length ; //Array.isArray(a_rxc); // alert ("a_rxc length=" + arr) ; Returned 1 /* Quick test of array to check can assign new rows to a_rxc. i can be treated as the rows dimension and j the columns*/ for (i=0; i<3; i++) { for (j=0; j<9; j++) { a_rxc[i][j] = i*j; alert ("i=" + i + "j=" + j + " " + a_rxc[i][j] ); } if (i+1<3) { a_rxc[i+1] = [[a_cols]]; } }
Und wenn Sie dieses Array an den Server übergeben, ist der Ajax, der für mich funktioniert
$.post("../ajax/myservercode.php", { jqArrArg1 : a_onedimarray, jqArrArg2 : a_rxc }, function(){ },"text" ) .done(function(srvresp,status) { $("#id_PageContainer").html(srvresp);} ) .fail(function(jqXHR,status) { alert("jqXHR AJAX error " + jqXHR + ">>" + status );} );
quelle
// für 3 x 5 Array
new Array(3).fill(new Array(5).fill(0))
quelle