我不知道如何解决这个问题。我如何使用map方法将数组中的所有元素移位一个?
function shift(arr) { // code } const b = [{ value: "" }, 8, "left"]; console.log(shif(b));
输出应为[“left”,{ value:“”},8];非常感谢大家!
mbskvtky1#
你可以从索引中减去1,加上长度以防止负值,得到长度的reaminder,并将其作为Map元素的索引。
function shift(arr) { return arr.map((_, i, a) => a[(i + a.length - 1) % a.length]); } const b = [{ value: "" }, 8, "left"]; console.log(shift(b));
sg24os4d2#
map在这里可能不是最合适的,但如果您坚持,
map
let arr = [{value: ""}, 8, "left"]; let shifted = arr.map((_, i, a) => a[(i + 1) % a.length]); console.log(shifted);
50few1ms3#
这里有一个例子,你可以如何从0位向右移动/旋转到上方**,而不使用任何内置的数组函数。如果位置大于数组大小,则将其减少到数组大小内的位置数。至于主要部分,你需要考虑从最后一个索引到起始索引if(i + places > list.length - 1)的转换,否则就把元素放到place参数定义的新位置。
if(i + places > list.length - 1)
const list = [4, 3, 2, 10, 12, 1, 5, 6]; function rightShift(list, places) { const result = []; if (places > list.length) { places = places % list.length; } for (let i = 0; i < list.length; i++) { if (i + places > list.length - 1) { result[places - (list.length - i)] = list[i]; } else { result[i + places] = list[i]; } } return result; } //Shift right 1 place console.log(rightShift([{ value: "" }, 8, "left"], 1)); //Shift right 154 places console.log(rightShift([4, 3, 2, 10, 12, 1, 5, 6], 154));
guykilcj4#
我来这里运行同样的问题,我结束了这样做
这也是我对Codility上的CyclicRotation的回答将数组向右旋转给定的步数。它的得分为100%
function arrayShift(arr, shiftCount) { let result = []; if (arr.length == 1 || shiftCount == 0) { return result; } for (let index = 0; index < arr.length; index++) { result[(index+shiftCount)%arr.length] = arr[index]; } return {result} } console.log(arrayShift([1,2,3,4,5],3))
4条答案
按热度按时间mbskvtky1#
你可以从索引中减去1,加上长度以防止负值,得到长度的reaminder,并将其作为Map元素的索引。
sg24os4d2#
map
在这里可能不是最合适的,但如果您坚持,50few1ms3#
这里有一个例子,你可以如何从0位向右移动/旋转到上方**,而不使用任何内置的数组函数。
如果位置大于数组大小,则将其减少到数组大小内的位置数。
至于主要部分,你需要考虑从最后一个索引到起始索引
if(i + places > list.length - 1)
的转换,否则就把元素放到place参数定义的新位置。guykilcj4#
我来这里运行同样的问题,我结束了这样做
这也是我对Codility上的CyclicRotation的回答将数组向右旋转给定的步数。它的得分为100%