JavaScriptで配列を簡単に切り捨てる方法は?


102

Linqには、Take()を実装するあらゆる要素の特定の数の要素を返すために呼び出される便利な演算子メソッドがありますIEnumerable。配列を操作するためのjQueryに類似したものはありますか?

または、別の質問:Javascriptで配列を切り捨てる方法を教えてください。


22
皆さん、jQueryの前にJavaScriptを学んでください。明日の質問は「jQueryが配列のほかに公開する他のデータ型は何か」でしょうか。
Ionuț G. Stan

回答:


184

スライス方式があります

array.slice(0, 4);

最初の4つの要素を返します。

他の値を破棄したい場合は、変数に割り当てることを忘れないでください。

注:これは単なる通常のJavaScriptであり、jqueryは必要ありません。


15
(0,4)は最初の5ではなく最初の4を返しませんか?
Simonは、

11
それは実際には真実ではありません。Simon Keepは正しいです。.slice()メソッドの2番目の引数は、返される最後の要素のの配列の位置です。array.slice(0、4)は要素0、1、2、3を返します-合計4つの要素。.slice(0、x)は最大ではなく、配列の先頭からすべての要素を返しますカットオフポイント、などの第二引数を考えていないのxを含みます。
Bungle、2012年

1
end含まれていない、右、MDN @SimonKeep参照されdeveloper.mozilla.org/en-US/docs/JavaScript/Reference/...
ASTER

2
変数に再度割り当てることを忘れないでください。それは、見た目と同じくらい単純なことです
kolexinfos

6
悪い方法は、新しい配列インスタンスを作成することです。jsのコーディングは悪い考えではありません。
G.ゲズ2015年

125

(2年後...)配列を切り捨てる必要がある場合は、length属性を使用することもできます。

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

注:現在の長さより長い長さを割り当てると、以下に示すように、未定義の配列要素が導入されます。

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"

編集:

@twhiteheadが後述するように、未定義の要素の追加はこれを行うことで回避できます。

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"

5
コードでこれを見つけたとき、私は最初に驚きました...しかし、それが最善の方法です(インデックス0から切り詰めている場合)davidwalsh.name/empty-array
kumarharsh

5
これは驚くほどシンプルなソリューションです。
ドミニク

3
この方法で行うガベージコレクションはどうですか?
G. Ghez 2015年

1
@JonathanM実際には、null値は導入されていません。新しい変数は宣言されていますが、値が割り当てられていないため、未定義です。
HåvardGeithus

3
すごい!このメソッドはArray、新しいを作成するのではなく、同じものを変更していると言えArrayます。
広々とした

22

切り捨てる方法を尋ねている場合(最後から要素を削除して配列を変更する)、spliceを使用します。

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

元の配列を変更せずに配列のサブセットを取得する方法を尋ねる場合は、sliceを使用してください。

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

スプライスが変更され、アクセスがスライスされることを覚えておいてください。最初の引数としての負の数は、配列の最後からのインデックスを示します。


11

.lengthプロパティを低い値に設定します。

公式ドキュメント: Array.prototype.length


3
配列のすべての要素を削除するには、長さをゼロに設定するのが最も簡単です。
hanmari


1

配列から要素を選択的にプルしたい場合は、jQuery.grepメソッドを使用できます。

(jQueryドキュメントから)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.