[英]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 on当
cars.length
为 5 时, 4 % cars.length
给你4
, 5 % 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.