反向数组,让新数组中的元素等于原始数组元素的长度-JavaScript

Hap*_*s31 11 javascript arrays reverse string-length

试图解决Codewars上的这个问题

我已经能够将数组反向转换为字符串,但是无法将该字符串分配给指定长度的单个元素。我试过了:

function ultimateReverse (array) {

 let newArray = array.join("").split("");
 let reversedArray = newArray.reverse();
 return reversedArray.join("");

}

console.log(ultimateReverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"]));

//!eiltonnacIdnasttubgibekilI
Run Code Online (Sandbox Code Playgroud)

但是我们想要的结果是:

["!", "eilt", "onn", "acIdn", "ast", "t", "ubgibe", "kilI"]

因此,根据原始数组,第一个元素的长度应为1,第二个元素的长度应为4,第三个元素的长度应为3,依此类推...

有没有一种方法可以将字符串拆分为元素数组,每个元素都有指定的长度?

我想到了通过执行以下操作来从原始数组中创建项目长度的数组:

function ultimateReverse (array) {

let elementLengths = [];

let newArray = array.join("").split("");
let reversedArray = newArray.reverse().join("");

for (let i = 0; i < array.length; i++) {
  let element = array[i];
  elementLengths.push(element.length);
}

return reversedArray + " " + elementLengths;

}

console.log(ultimateReverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"]));

//!eiltonnacIdnasttubgibekilI 1,4,3,5,3,1,6,4
Run Code Online (Sandbox Code Playgroud)

现在,如果我可以根据原始元素的长度将字符串拆分为数组中的元素...

Cer*_*nce 10

首先构造完整的反向字符串,例如

!eiltonnacIdnasttubgibekilI
Run Code Online (Sandbox Code Playgroud)

然后,从一个初始长度的数组(可以预先完成.map)中,遍历该数组和slice反向字符串中的那个长度,然后推入一个数组:

!eiltonnacIdnasttubgibekilI
Run Code Online (Sandbox Code Playgroud)

您还可以将初始反向数据保留为数组splice,而不是重新分配reversedStr

function ultimateReverse(array) {
  const lengths = array.map(({ length }) => length);
  let reversedStr = [...array.join("")].reverse().join('');
  const result = [];
  lengths.forEach((length) => {
    result.push(reversedStr.slice(0, length));
    reversedStr = reversedStr.slice(length);
  });
  return result;
}

console.log(ultimateReverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"]));
Run Code Online (Sandbox Code Playgroud)

  • 那是破坏性的。参数列表中的{{propName}`将从参数列表中该位置处的项中提取名为“ propName”的属性,并将其放入名为“ propName”的变量中。字符串的“ .length”是整数。 (2认同)