您能告诉我为什么此代码会产生错误吗? 我想创建一个多维数组
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
console.log(segments)
let cols = [];
let currSegment, currLetter;
for (let i = 0; i < segments.length; i += 1) cols.push([]);
console.log(cols[2])
//cols.push([])
console.log(cols.length + ' :L')
for (let j = 0; j < segments.length; j += 1) {
currSegment = segments[j];
for (let k = 0; k < currSegment.length; k += 1) {
currLetter = currSegment[k]
cols[k].push(currLetter);
}
}
错误:
未捕获的TypeError:无法读取未定义的属性“ push”
答案 0 :(得分:1)
您输入的索引错误,已更正代码。
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
console.log(segments)
let cols = [];
let currSegment, currLetter;
for (let i = 0; i < segments.length; i += 1) cols.push([]);
console.log(cols[2])
//cols.push([])
console.log(cols.length + ' :L')
for (let j = 0; j < segments.length; j += 1) {
currSegment = segments[j];
for (let k = 0; k < currSegment.length; k += 1) {
currLetter = currSegment[k]
cols[j].push(currLetter);
}
}
console.log(cols)
答案 1 :(得分:0)
在第三次迭代后使用k
的值,您试图将项目推入实际上不存在的 index 中。
更改
cols[k].push(currLetter);
收件人
cols[j].push(currLetter);
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
console.log(segments)
let cols = [];
let currSegment, currLetter;
for ( let i = 0; i < segments.length; i += 1 ) cols.push([]);
console.log(cols[2])
//cols.push([])
console.log(cols.length + ' :L')
for ( let j = 0; j < segments.length; j += 1 ) {
currSegment = segments[j];
for (let k = 0; k < currSegment.length; k += 1 ) {
currLetter = currSegment[k]
cols[j].push(currLetter);
}
}
console.log(cols);
答案 2 :(得分:0)
您仅将空数组推入col变量2次。您正在尝试访问从0到7的cols [k](如果我们考虑了segments数组中的第一个索引)。
答案 3 :(得分:0)
cols[k]
不存在-使用cols[j]
:
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
let cols = [];
let currSegment, currLetter;
for (let i = 0; i < segments.length; i += 1) cols.push([]);
for (let j = 0; j < segments.length; j += 1) {
currSegment = segments[j];
for (let k = 0; k < currSegment.length; k += 1) {
currLetter = currSegment[k]
cols[j].push(currLetter);
}
}
console.log(cols);
您还可以像这样优化和简化代码:
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
const cols = segments.map(e => [...e]);
console.log(cols);
上面的方法要快得多-复杂度为O(N)
,因为您要遍历segments
一次。
答案 4 :(得分:0)
cols
仅包含3个空数组,并且在某个时刻k
将大于2,因此cols[k]
返回undefined
。
答案 5 :(得分:0)
我不关心您的预期结果,只是指出您的代码中的错误。 看看您的内部for循环:
for (let k = 0; k < currSegment.length; k += 1) {
currLetter = currSegment[k]
cols[k].push(currLetter);
}
循环在字母'avgekcr'上运行,该字母的长度为7,而 cols 数组的长度仅为3。因此,cols [3]是未定义的,因此只会引发错误:>
Cannot read property 'push' of undefined
答案 6 :(得分:0)
使用以下方法将元素添加到“ cols”,因为“ cols”是一维数组。仅当cols [k] .push是多维数组时,才能使用它。
cols.push(currSegment[k]); // no need to define an additional variable to keep currSegment[k] value
对于您的实现,您只需使用split函数将字符串制作为char数组,然后concat函数将先前的cols和新的char数组合并。
const segments = ['avgekcr', 'efgghe', 'ewlskffd'];
let cols = [];
for (let i = 0; i < segments.length; i++) {
cols = cols.concat(segments[i].split(''));
}
如果需要访问二维数组中的所有段,请使用以下方法。
for (let i = 0; i < segments.length; i++) {
cols.push([]);
cols[i] = segments[i].split('');
}