JavaScriptのArrayクラスが配列の最後の要素を取得するための最後のメソッドを提供しないのは、ちょっと奇妙です。解決策は簡単(Ar [Ar.length-1])ですが、それでもあまりにも頻繁に使用されています。
これがまだ組み込まれていない深刻な理由はありますか?
array[array.length-1]ている方法より速く他より。
(Ar[Ar.length-1])パフォーマンスが20倍向上します。
JavaScriptのArrayクラスが配列の最後の要素を取得するための最後のメソッドを提供しないのは、ちょっと奇妙です。解決策は簡単(Ar [Ar.length-1])ですが、それでもあまりにも頻繁に使用されています。
これがまだ組み込まれていない深刻な理由はありますか?
array[array.length-1]ている方法より速く他より。
(Ar[Ar.length-1])パフォーマンスが20倍向上します。
回答:
JavaScriptが非常にゆっくりと変化するためです。そしてそれは人々がブラウザをゆっくりとアップグレードするからです。
多くのJavaScriptライブラリは、独自のlast()機能を実装しています。1つ使用してください!
last()関数を実際に書く方法を探していたと考える理由はありません。問題は、Javascriptコア言語自体の開発の性質に関するものでした。
あなたはこのようなことをすることができます:
[10, 20, 30, 40].slice(-1)[0]
言語に追加できるヘルパーメソッドの数は無限です。彼らはこれを追加することを考えていなかったと思います。
自分で定義するのは簡単です。それがJavaScriptの力です。
if(!Array.prototype.last) {
Array.prototype.last = function() {
return this[this.length - 1];
}
}
var arr = [1, 2, 5];
arr.last(); // 5
ただし、これにより、(誤って)for..inループを使用して配列を反復処理するサードパーティのコードで問題が発生する可能性があります。
ただし、ブラウザーサポートの問題に縛られていない場合は、新しいES5構文を使用してプロパティを定義すると、次のように関数を列挙できないようにすることで、この問題を解決できます。
Object.defineProperty(Array.prototype, 'last', {
enumerable: false,
configurable: true,
get: function() {
return this[this.length - 1];
},
set: undefined
});
var arr = [1, 2, 5];
arr.last; // 5
for..in問題を正確に解決するためであることを述べました。確かに、ES5の幅広い実装はまだありませんが、ブラウザーがIE9を含めて高速に追いついてきているので、これで十分に理解できます。
this.length - 1評価されます。-1これは負の数であるため、要素のインデックスではなく配列プロパティとして扱われます。
i = [].concat(loves).pop(); //corn
アイコン猫はポップコーンが大好き
Array.prototype.last = Array.prototype.last || function() {
var l = this.length;
return this[l-1];
}
x = [1,2];
alert( x.last() )
nullまたはundefined?
this[l-1]あなたを与えるだろうundefined、存在しないプロパティにアクセスするための通常のであるとして。個人的にはundefined、JSが戻るのではなく例外をスローしたいのですが、JSはラグの下でエラーを一掃することを好みます。
この質問への答えを自分で探しにここに来ました。スライスの答えがおそらく最良ですが、私は先に進んで、プロトタイプの拡張を練習するためだけに「最後の」関数を作成したので、先に進んでそれを共有すると思いました。これには、オプションで配列を逆方向に数え、たとえば最後から2番目または最後から3番目の項目を引き出せるという他のいくつかの利点よりも優れています。カウントを指定しない場合、デフォルトで1になり、最後のアイテムを取り出します。
Array.prototype.last = Array.prototype.last || function(count) {
count = count || 1;
var length = this.length;
if (count <= length) {
return this[length - count];
} else {
return null;
}
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.last(); // returns 9
arr.last(4); // returns 6
arr.last(9); // returns 1
arr.last(10); // returns null
last(4)またはlast(9)関数名の意味を失うとき、すなわち; last
最後の要素をスライスするもう1つの簡単な方法を次に示します
var tags = [1, 2, 3, "foo", "bar", "foobar", "barfoo"];
var lastObj = tags.slice(-1);
lastObjです["barfoo"]。
Pythonも同じ方法でこれを行い、JSを使用しようとするとうまくいきました。スクリプト言語での文字列操作は同じように機能すると思います。
同様に、配列の最後の2つのオブジェクトが必要な場合は、
var lastTwoObj = tags.slice(-2)
等を与えるでしょう["foobar", "barfoo"]。
pop()メソッドは最後の値をポップします。しかし問題は、配列の最後の値を失うことです
ええ、または単に:
var arr = [1, 2, 5];
arr.reverse()[0]
新しいリストではなく値が必要な場合。
item= array.pop();。