将字符串映射到 2D 数组以获得"zig-zag"效果



第一篇文章,js中编码的新手。我试图创建一个函数,该函数以(2(字符串数组作为输入,例如["coderbyte","3"],第一个字符串是任何随机字符串。第二个字符串表示函数应在2D数组中创建的行数。然后,函数应该以Z字形模式打印第一个字符串,如以下所示:

c r eo e b td y

然后,函数应该返回通过在遍历每行时组合字符而形成的单词,例如";creoebtdy";。我已经声明了空数组,并使用while循环,使用以下代码将前三个字符放置在数组的正确位置:


//initialize array of arrays of empty spaces
rows = Number(strArr[1])
columns = strArr[0].length
//console.log(rows)
//console.log(columns)
a = Array(rows).fill('').map(x => Array(columns).fill(''))
let i = 0
//a[0][0]= strArr[0][0]
while (i <= rows-1) {
a[i][i]= strArr[0][i]
//console.log(a)
i++ 
}
//console.log(a)
//let j = i - 2
//console.log(i)
while (i >= rows && i < rows*2) {
let j = i - 2
a[j][i] = strArr[0][i]
i++
j--
}
console.log(a)
}
stringChal3(["coderbyte", "3"])

我得到了一个";TypeError:无法设置未定义的"的属性"5";第23行的错误(a[j][i]…(;e";以及";r〃;在数组中。我不确定如何纠正这个错误。非常感谢所有的帮助!

由于">非常感谢所有的帮助";,这里有一种完全不同的方式来实现之字形效果。

注意到锯齿形图案在顶部和底部行中每4个字符使用一次,但偏移量/相位不同(顶部行为0,底部行为2(,中间行每2个字符使用(从偏移量1开始(。

const zigzag = str => {
const zig = (period, phase) => [...str]
.map((character, index) => (index % period == phase) ? character : ' ')
.join('');
console.log(zig(4, 0));
console.log(zig(2, 1));
console.log(zig(4, 2));
}
zigzag('coderbyte');

支持任意行数的版本

const zigzag = (str, rows) => {
const zig = (period, phase) => [...str]
.map((character, index) => [phase, period - phase].includes(index % period) ? character : ' ')
.join('');
for (let row = 0; row < rows; ++row) {
console.log(zig(rows + rows - 2 || 1, row));
}
}
zigzag('coderbyte', 3);
console.log('another example:');
zigzag('abcdefghijklmnopqrstuvwxyz', 5);

最新更新