とのように、アレイをクリーンアップするカスタムプロトタイプを作成しました。それは働いていたし、このように見えた:プロトタイプで配列をインプレースで修正する
// 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;
};
私の唯一の不満は、私はこのようにそれを呼び出す必要があるということです。
names = names.clean_up();
以下のように私はそれを呼び出すことができれば、私はArray.sort()
のように、それを好む(Iこれはインプレース実装と呼ばれています)。どうやってそれをすることができますか?
names.clean_up();
EDIT:(どうやら、これは回答では、ここではなく所属)
次のように私の現在のソリューションは見えますが、それは少し効果がない感じ。それがよりうまくいくかどうか疑問に思います。 1のための、および他に無効
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);
});
};
:それはあなたが元の配列を変更しないでくださいmentioned数倍となっています。何故ですか?
Array.sort()
のような機能があれば、その言語で実行できることを示しています。一部のの実装は「大丈夫」と思われますか? sort()
は大丈夫だがカスタム機能はないのはなぜですか?
あなたの頭を包み込むのはちょっと難しいですし、 'reduceRight'では直感的ではありませんが、私がしたいことはまったくあります。ありがとうございました。基本的には、 'splice'を使用することがキーです(私のコードと比較して)。 – WoodrowShigeru
@ WoodrowShigeru-もし* forEachRight *があったらそれを使用します。 ;-) – RobG