我有一个位置数组,需要能够分别访问起点、中间点和目的地。
我知道我的起点总是第一个元素,目的地总是最后一个元素,但我无法弄清楚如何动态地访问所有中间点?
我有一个位置数组,需要能够分别访问起点、中间点和目的地。
我知道我的起点总是第一个元素,目的地总是最后一个元素,但我无法弄清楚如何动态地访问所有中间点?
由于没有数据可用,我将使用基本数组进行演示。通过这种方法,您将保留原始数组。
var arr = [1,2,3,4,5,6,7];
var middle = arr.slice(1, -1);
console.log(middle);
var arr = [1,2,3,4,5,6,7];
var middle = arr.slice(1, arr.length-1);
console.log(middle);
shift()
和 pop()
方法来分别获取数组的第一个和最后一个元素。在这些操作之后,剩下的元素就是数组的“中间点”。尝试一下:
为了实现这个目标,你可以使用 shift()
和 pop()
方法来分别获取数组的第一个和最后一个元素。在这些操作之后,剩下的元素就是数组的“中间点”。尝试一下:
var middlePoints = ['start', 'A', 'B', 'C', 'end'];
var origin = middlePoints.shift();
var destination = middlePoints.pop();
console.log(origin);
console.log(middlePoints);
console.log(destination);
shift和pop会影响当前数组;有没有一种方法可以获取中间点并改变当前数组?与slice类似,但是slice不会对其产生影响。
当然,你可以使用filter()
来实现这个功能,检查项目在数组中的索引:
var input = ['start', 'A', 'B', 'C', 'end'];
var output = input.filter((v, i) => i !== 0 && i !== input.length -1);
console.log(input); // original value retained
console.log(output); // copied via filter
var allPoints = [0, 1, 2, 3, 4, 5],
midPoints = []
/*start the iteration at index 1 instead of 0 since we want to skip the first point anyway and stop iteration before the final item in the array*/
for (var i = 1; i < (allPoints.length - 1); i++) {
midPoints.push(allPoints[i]);
}
console.log(midPoints);
midPoints = allPoints.slice(1, allPoints.length-1)
可以达到同样的效果,更易读,更清晰地表达你的意图,而且更快。 - Thomasallpoints
中第一个项目之后开始并在最后一个项目之前结束的部分。 - Thomas一切都变得更加容易了,使用过滤器方法
let Arr = ['first', 'A', 'B', 'C', 'last'];
NewArr = Arr.filter((item,i) => i !== 0 && i !== Arr.length-1);
console.log(NewArr)