Ich lerne Javascript, und ich sah eine Funktion auf SO für den Vergleich von Arrays zu überprüfen, ob sie gleich sind. Meine aktuelle Funktion gibt jedoch false zurück, wenn die beiden Arrays [string1, string2] & [string2, string1] sind. Grundsätzlich sind die beiden Positionen vertauscht. Der Code ist wie folgt:Vergleichen von Arrays in Javascript, wo Reihenfolge egal ist
function _compareArrays(arr1,arr2){
var result = arr1 != null && arr2 != null && arr1.length == arr2.length && arr1.every(function(element) {
return arr2.indexOf(element);
});
return result ;
}
Allerdings möchte ich diese beiden Arrays als gleich zurückgegeben werden. Also, ich änderte .every
zu .indexOf()
und es schien zu funktionieren. Aber ich habe Zweifel, wie genau wird der Zähler hier erhöht, um sicherzustellen, dass der Vergleich für jedes Element durchgeführt wird? Ich meine, wie, in C++, was wir tun,
for (int i = 0; i < 10; i++)
if (arr1[i] == arr2[i]
cout<<"Elements are same\n";
Hier habe ich eine explizite i++
, die den Zähler erhöht. Wie läuft es in der obigen Funktion ab?
Danke!
Ihr erster Codeblock ist totaler Quatsch. 'indexOf' nimmt keine Funktion als Argument in irgendeiner Dokumentation, die ich jemals gelesen habe -' Also, ich änderte .every zu .indexOf() 'wenn Sie einen platten Reifen haben, ersetzen Sie das Rad durch eine Banane? –
Ich würde einfach [flache Kopien erstellen] (https://stackoverflow.com/questions/3978492/javascript-fastest-way-to-duplicate-an-array-slice-vs-for-loop) der Arrays, sortieren diese und dann den von Ihnen erwähnten Vergleichsmechanismus verwenden – Phil
Die '_compareArrays' Methode, die Sie definiert haben, gibt immer -1 zurück. Wie die 'every' Methode iteriert, ohne einen Zähler explizit zu inkrementieren: Es ist eine Funktion des Array-Prototyps, die die Iteration automatisch durchführt. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every – nipuna777