6

配列があるとしましょう:

var myArr = new Array('alpha','beta','gamma','delta');

そして、関数が特定のアイテムの前にあるすべてのアイテムの配列を返すようにします。

function getAllBefore(current) {
    var myArr = new Array('alpha','beta','gamma','delta');
    var newArr = ???
    return newArr;
}

getAllBefore('beta'); // returns Array('alpha');
getAllBefore('delta'); // returns Array('alpha','beta','gamma');

これを取得する最速の方法は何ですか? 配列を値で分割できますか? それぞれをループして、その場で新しい配列を構築する必要がありますか? おすすめは何ですか?

反対のことをしたい場合はどうなりgetAllAfter()ますか?

4

4 に答える 4

18
function getAllBefore(current) {
    var myArr = new Array('alpha','beta','gamma','delta');
    var i = myArr.indexOf(current);
    return i > -1 ? myArr.slice(0, i) : [];
}

指定されたアイテムのインデックスを取得します。見つかった場合は、.slice()0 からそのインデックスまで。見つからない場合は、空の配列 (または任意の他のデフォルト値) を返します。

.indexOf()IE8 以前では (配列に対して) サポートされていませんが、使用できるshimがあることに注意してくださいfor。代わりに単純なループを使用することもできます。

于 2013-07-02T22:06:15.880 に答える
1

とを使用indexOfsliceます。

newArr = myArr.slice(0, myArr.indexOf(current));
于 2013-07-02T22:05:57.297 に答える