javascript 如何使用方法map将数组中的所有元素向右移动(1)?

6yt4nkrj  于 2023-04-19  发布在  Java
关注(0)|答案(4)|浏览(135)

我不知道如何解决这个问题。我如何使用map方法将数组中的所有元素移位一个?

function shift(arr) {
  // code
}
const b = [{ value: "" }, 8, "left"];
console.log(shif(b));

输出应为[“left”,{ value:“”},8];
非常感谢大家!

mbskvtky

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));
sg24os4d

sg24os4d2#

map在这里可能不是最合适的,但如果您坚持,

let arr = [{value: ""}, 8, "left"];
let shifted = arr.map((_, i, a) => a[(i + 1) % a.length]);
console.log(shifted);
50few1ms

50few1ms3#

这里有一个例子,你可以如何从0位向右移动/旋转到上方**,而不使用任何内置的数组函数。
如果位置大于数组大小,则将其减少到数组大小内的位置数。
至于主要部分,你需要考虑从最后一个索引到起始索引if(i + places > list.length - 1)的转换,否则就把元素放到place参数定义的新位置。

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));
guykilcj

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))

相关问题