二维数组中的空项问题
Probleme with empty items in 2d array
我正在尝试用 JS 构建二维数组。
一个剧院有26条线,每条线有100个座位:
function theaterSeats() {
let seats= new Array(26);
for (let i = 1; i <= 26; i++){
seats[i] = new Array(100);
for (let j = 1; j <= 100; j++) {
seats[i][j] = `${i}-${j}`
}
}
return seats;
}
console.log(theaterSeats());
结果和我预期的相差不远,只是每个数组中都有一个空项...我不明白为什么。请帮忙?
[
<1 empty item>,
[
<1 empty item>, '1-1', '1-2', '1-3',
'1-4', '1-5', '1-6', '1-7',
'1-8', '1-9', '1-10', '1-11'
(...................)
提前感谢您的回答;)。
简单map解决方案
const theaterSeats = [...Array(26)].map((_, i) => {
return [...Array(100)].map((_, j) => `${i+1}-${j+1}`)
})
console.log(theaterSeats)
JavaScript 数组的索引从 0 开始,这就是为什么您的第一项始终为空的原因,因为您跳过了索引 0 并从索引 1 开始迭代。您需要从索引 0 开始填充数组!
您的代码的正确版本可能是:
function theaterSeats() {
let seats= new Array(26);
for (let i = 0; i < 26; i++){
seats[i] = new Array(100);
for (let j = 0; j < 100; j++) {
seats[i][j] = `${i + 1}-${j + 1}`
}
}
return seats;
}
这只是因为您使用 1 作为第一个索引而不是 0,数组索引从 0 开始,例如:
一个包含 7 个元素的数组具有这些索引:0、1、2、3、4、5、6。因此,当为某个位置设置一个值时,您将像这样开始:array[0] = 'some value', array[1] = 'some other value' ...
在你的 for 循环中,你需要从 i 和 j = 0 开始。所以它看起来像
function theaterSeats() {
let seats= new Array(26);
for (let i = 0; i <= 26; i++){
seats[i] = new Array(100);
for (let j = 0; j <= 100; j++) {
seats[i][j] = `${i+1}-${j+1}`
}
}
return seats;
}
console.log(theaterSeats());
感谢您的回复;)。
我在检查您的答案之前找到了解决方案。我这样做了,它正在工作:
function theaterSieges() {
let siege = new Array(26);
for (let i = 0; i < 26; i++){
siege[i] = new Array(100);
for (let j = 0; j < 100; j++) {
siege[i][j] = `${i+1}-${j+1}`
}
}
return siege;
}
console.log(theaterSieges());
我会记住你的提示。
再次感谢 ;)
我正在尝试用 JS 构建二维数组。
一个剧院有26条线,每条线有100个座位:
function theaterSeats() {
let seats= new Array(26);
for (let i = 1; i <= 26; i++){
seats[i] = new Array(100);
for (let j = 1; j <= 100; j++) {
seats[i][j] = `${i}-${j}`
}
}
return seats;
}
console.log(theaterSeats());
结果和我预期的相差不远,只是每个数组中都有一个空项...我不明白为什么。请帮忙?
[
<1 empty item>,
[
<1 empty item>, '1-1', '1-2', '1-3',
'1-4', '1-5', '1-6', '1-7',
'1-8', '1-9', '1-10', '1-11'
(...................)
提前感谢您的回答;)。
简单map解决方案
const theaterSeats = [...Array(26)].map((_, i) => {
return [...Array(100)].map((_, j) => `${i+1}-${j+1}`)
})
console.log(theaterSeats)
JavaScript 数组的索引从 0 开始,这就是为什么您的第一项始终为空的原因,因为您跳过了索引 0 并从索引 1 开始迭代。您需要从索引 0 开始填充数组!
您的代码的正确版本可能是:
function theaterSeats() {
let seats= new Array(26);
for (let i = 0; i < 26; i++){
seats[i] = new Array(100);
for (let j = 0; j < 100; j++) {
seats[i][j] = `${i + 1}-${j + 1}`
}
}
return seats;
}
这只是因为您使用 1 作为第一个索引而不是 0,数组索引从 0 开始,例如:
一个包含 7 个元素的数组具有这些索引:0、1、2、3、4、5、6。因此,当为某个位置设置一个值时,您将像这样开始:array[0] = 'some value', array[1] = 'some other value' ...
在你的 for 循环中,你需要从 i 和 j = 0 开始。所以它看起来像
function theaterSeats() {
let seats= new Array(26);
for (let i = 0; i <= 26; i++){
seats[i] = new Array(100);
for (let j = 0; j <= 100; j++) {
seats[i][j] = `${i+1}-${j+1}`
}
}
return seats;
}
console.log(theaterSeats());
感谢您的回复;)。
我在检查您的答案之前找到了解决方案。我这样做了,它正在工作:
function theaterSieges() {
let siege = new Array(26);
for (let i = 0; i < 26; i++){
siege[i] = new Array(100);
for (let j = 0; j < 100; j++) {
siege[i][j] = `${i+1}-${j+1}`
}
}
return siege;
}
console.log(theaterSieges());
我会记住你的提示。
再次感谢 ;)