jquery 如何返回JavaScript数组中当前值之前的所有项?

5t7ly7z5  于 2022-12-18  发布在  jQuery
关注(0)|答案(5)|浏览(122)

假设我有一个数组:

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(),那又怎么样呢?

dly7yett

dly7yett1#

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到该索引。如果没有找到,则返回一个空数组(或任何其他默认值)。
请注意,IE8和更早版本不支持.indexOf()(对于数组),但是可以使用shim,或者可以只使用简单的for循环。

ukdjmx9f

ukdjmx9f2#

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))
xfb7svmp

xfb7svmp3#

使用indexOfslice

newArr = myArr.slice(0, myArr.indexOf(current));
50few1ms

50few1ms4#

试试这个

var index = myArr.indexOf('beta');
var before = myArray.slice(0, index);
sxissh06

sxissh065#

我最近不得不对一个对象数组做类似这样的事情。这是我所做的:

const myArr = [
    { controlId: 1, value: 'alpha'},
    { controlId: 2, value: 'beta' },
    { controlId: 3, value: 'gamma' },
    { controlId: 4, value: 'delta'}
];

function getAllBefore(id) {
    const index = myArr.findIndex( ({ controlId }) => controlId === id);
    return myArr.filter((_, i) => i < index);
}

相关问题