ich einen benutzerdefinierten Prototyp, mit dem erstellten ein Array aufzuräumen, um entfernen und Art es dupliziert. Es funktionierte und sah wie folgt aus:Ändern eines Array an Ort und Stelle mit Prototyp
// given an example array such as this.
var names = [ 'Lara', 'Lucy', 'Alexa', 'Vanessa', 'Lucy', 'Brianna', 'Sandra' ];
Array.prototype.clean_up = function(){
var
set = []
;
this.forEach(function(item){
if (set.indexOf(item) === -1) {
set.push(item);
}
});
set.sort();
return set;
};
Mein einziges Problem ist, dass ich es so nennen haben:
names = names.clean_up();
Ich würde es lieber, wenn ich es nennen könnte wie folgt, wie Array.sort()
(I Ich glaube, dies wird als In-Place-Implementierung bezeichnet). Wie konntest du das tun?
names.clean_up();
EDIT: (Offenbar das gehört hier und nicht in Antworten)
Meine aktuelle Lösung sieht wie folgt aus, aber es fühlt sich ein bisschen unwirksam. Ich frage mich, ob es besser gemacht werden könnte.
Array.prototype.clean_up = function(){
var
set = [],
self = this
;
this.forEach(function(item){
if (set.indexOf(item) === -1) {
set.push(item);
}
});
set.sort();
// reset and re-fill.
while (this.length > 0) {
this.pop();
}
set.forEach(function(item){
self.push(item);
});
};
Unwirksame für einen, und für die anderen: es hat mentioned mehrere Male, dass Sie keine Original-Arrays ändern sollte. Warum das?
Ich meine, wenn es eine Funktion wie Array.sort()
dann zeigt es, dass die Sprache, die es dazu in der Lage ist, und dass einig Implementierungen scheinen „in Ordnung“ zu sein? Warum ist sort()
okay, aber eine benutzerdefinierte Funktion nicht?
Es ist ein bisschen schwer, den Kopf zu wickeln, und ich bin nicht intuitiv mit dem 'reduceRight', aber es macht perfekt, was ich will. Vielen Dank. Grundsätzlich ist die Verwendung von "Spleiß" der Schlüssel (im Vergleich zu meinem Code). – WoodrowShigeru
@ WoodrowShigeru-wenn es ein * forEachRight * Ich würde das verwenden. ;-) – RobG