简体   繁体   English

如何从 Javascript 数组中获取顺序元素?

[英]How to get sequential elements from Javascript array?

I have this Javascript array:我有这个 Javascript 阵列:

var cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"];

I know that I can get each of these elements by index like this:我知道我可以像这样通过索引获取这些元素中的每一个:

cars[2] // => "BMW"

But how can I get three sequential elements at once?但是我怎样才能一次得到三个连续的元素呢?

getThreeCarsByIndex(4) // => ["Fiat", "Saab", "Volvo"]

Thanks for your help.谢谢你的帮助。

Just use simple modular arithmetic-只需使用简单的模运算-

 const cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; function getThreeCarsByIndex(ix) { return [0, 1, 2].map(offset => cars[(ix + offset) % cars.length]); } console.log(getThreeCarsByIndex(4));

When cars.length is 5, 4 % cars.length gives you 4 , 5 % cars.length wraps it back to 0 and so oncars.length为 5 时, 4 % cars.length给你45 % cars.length把它换回 0 等等

Oh and also here's a general version because why not-哦,还有一个通用版本,因为为什么不——

 function getXElementsFrom(start, x, arr) { return [...Array(x).keys()].map(offset => arr[(start + offset) % arr.length]); } const cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; console.log(getXElementsFrom(4, 3, cars));

[...Array(x).keys()] is basically the equivalent of range(x) in languages like python. [...Array(x).keys()]基本上相当于 python 等语言中的range(x)

Use modulo operator to get the desired index without being out of range.使用模运算符获得所需的索引而不会超出范围。

 function getThreeCarsByIndex(array, index) { const result = []; for (let i = 0; i < 3; i++) { result.push(array[(index + i) % array.length]); } return result; } var cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; console.log(getThreeCarsByIndex(cars, 4));

Here is one approach这是一种方法

 const cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; const getThreeCarsByIndex = (index) => cars.slice(index, index + 3).concat(cars.slice(0, (index + 1) % 3)) console.log(getThreeCarsByIndex(4))

Use slice .使用slice If length is not met (3 here), grab the remaining elements from array begin如果不满足长度(此处为 3),则从数组开始中获取剩余元素

 const getThreeCarsByIndex = (arr, index) => { const res = arr.slice(index, index + 3); return res.concat(arr.slice(0, 3 - res.length)); }; var cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; console.log(getThreeCarsByIndex(cars, 4))

You can define a custom function and check whether the given count + given index is greater than length of the array您可以定义一个自定义 function 并检查给定计数+给定索引是否大于数组length

 const getElementsFromIndex = (arr, ind, n) => { if(n + ind > arr.length - 1){ let elementsFromStart = ind + n - arr.length + 1; console.log(elementsFromStart) return arr.slice(ind).concat(arr.slice(0, elementsFromStart)) } else return arr.slice(ind, ind + n); } const arr = [1,2,3,4,5]; console.log(getElementsFromIndex(arr, 4, 3))


var cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat", "Saab", "Volvo"];

cars.slice(4, 7); // => ["Fiat", "Saab", "Volvo"]

It's enough just to write只写就够了

cars.sort().slice(1,4);

Of course you can create a function that will work for other arrays as well, eg当然,您可以创建一个 function 也适用于其他 arrays,例如

 let cars = ["Saab", "Volvo", "BMW", "Volkswagen", "Fiat"]; getSequentionalElements = (arr, firstElement, lastElement) => arr.sort().slice(firstElement, lastElement) let newArray = getSequentionalElements(cars, 1, 4) console.log(newArray);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM