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 回答
1

javascript切片数组

// array.slice(start, end)
const FRUITS = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = FRUITS.slice(1, 3);
// citrus => [ 'Orange', 'Lemon' ]

// Negative values slice in the opposite direction
var fromTheEnd = FRUITS.slice(-3, -1);
// fromTheEnd => [ 'Lemon', 'Apple' ]

数组只切割最后 5 个元素

 arr.slice(Math.max(arr.length - 5, 0))
于 2022-02-14T17:26:43.557 回答
0

尝试这样的事情

var index = myArr.indexOf('beta');
var before = myArray.slice(0, index);
于 2013-07-02T22:10:58.553 回答