试图解决关于Codewar的卡塔。
我已经能够将数组反转为字符串,但还不能将该字符串分配到指定长度的单个元素中。我试过:
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
但我们想要的结果是:
["!", "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
现在,如果我可以根据原始元素的长度将字符串拆分成数组中的元素.
发布于 2019-05-18 19:35:32
首先构造完全反向字符串,如
!eiltonnacIdnasttubgibekilI
然后,从初始长度的数组(可以预先使用.map
完成),从反向字符串中迭代该数组和slice
,并推送到数组:
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!"]));
您还可以将初始反转数据保留为splice
的数组,而不是重新分配reversedStr
。
function ultimateReverse(array) {
const lengths = array.map(({ length }) => length);
const reversedChars = [...array.join('')].reverse();
return lengths.map(
length => reversedChars.splice(0, length).join('')
);
}
console.log(ultimateReverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"]));
发布于 2019-05-19 01:35:49
您还可以通过以下方式解决这一问题:尊重字符串,然后通过字符串进行映射,然后使用substr
从本质上“将其切割成碎片”:
let reverse = arr => {
let i = 0, rData = [...arr.join('')].reverse().join('')
return arr.map(x => {
let str = rData.substr(i, x.length)
i += x.length
return str
})
}
console.log(reverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"]))
基本上,映射原始数组和每个字符串的映射,substr
从组合的反向字符串映射到当前的x长度。
https://stackoverflow.com/questions/56204534
复制相似问题