javascript - typescript 从数组的前面和后面获取 X 个元素
我想优化下面的代码,因为它似乎步骤太多。代码确实可以运行,但我想看看是否有更好的方法来实现。我基本上想从 shipmentTracings 数组中取前 X 个元素和后 X 个元素。有没有办法优化这一部分?
此外,我正在根据 numberOfTracings/2 来推导数组左侧和右侧我想要的元素。对于奇数,我会向下取整,但你可以看到我正在使用 paddingRight 来利用剩余部分(如果有的话)。有没有更好的方法来做这个呢?
const numberOfTracings = environment.shipmentTracingMarkerLimit - this.shipmentTracking.shipmentStops.length; // i.e. 7
const paddingLeft = Math.floor(numberOfTracings / 2);
const paddingRight = numberOfTracings - paddingLeft * 2; //i am doing this because I want to use that extra array spot to be padded. It
const myFirstArr = this.shipmentTracking.shipmentTracings.slice(0, paddingLeft);
const myFirstArr2 = this.shipmentTracking.shipmentTracings.slice(-(paddingLeft + paddingRight));
const myFirstArr3 = myFirstArr.concat(myFirstArr2);
myFirstArr3.forEach((shipmentTracing) => this.createRouteMarkerForTracing(shipmentTracing));
答案#1
使用你在评论中的例子,你可以使用 ES2015 的扩展运算符来做类似这样的事情:
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
const padding = 2;
const firstAndLast = [...fruits.slice(0, padding), ...fruits.slice(-padding)];
console.log(firstAndLast);编辑:根据评论更新,基于 padding 计算左/右切片:
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango", "Dragon Fruit", "Kiwi", "Apricot", "Lime", "Plantain"];
const getFirstAndLast = (arr, padding) => {
const left = Math.ceil(padding / 2);
const right = padding - left;
return [...arr.slice(0, left), ...arr.slice(-right)];
};
// gets first 4 and last 3 given a padding of 7
const firstAndLast = getFirstAndLast(fruits, 7);
console.log(firstAndLast);