我想设置一个包含 m * n 对象的网格。此网格的宽度为 m 行, n 列。
我先试过这段代码
let map = [][]; // Create an array that takes a x and y index
function createMap() {
for (let x = 0; x < columnCount; x++) {
for (let y = 0; y < rowCount; y++) {
addCell(x, y);
}
}
}
function addCell(x, y) {
map[x][y] = cell(); // create a new object on x and y
}
显然这是一种错误的语法。地图的初始化是错误的。如何通过将x和y坐标传递给数组来创建可以访问对象的数组?
我想说我想访问(3 | 7)上的对象我想去map[3][7]
。
这可能吗?
答案 0 :(得分:3)
你无法初始化2d数组,因为js中没有真正的2d数组。但是,您可以设置常规数组,并向其中添加数组:
function createMap(columnCount, rowCount) {
const map = [];
for (let x = 0; x < columnCount; x++) {
map[x] = []; // set up inner array
for (let y = 0; y < rowCount; y++) {
addCell(map, x, y);
}
}
return map;
}
function addCell(map, x, y) {
map[x][y] = cell(); // create a new object on x and y
}
const map = createMap(10, 10);
答案 1 :(得分:2)
您需要一个数组作为值,并检查一行是否不存在。
function createMap(rowCount, columnCount) {
for (let x = 0; x < rowCount; x++) {
for (let y = 0; y < columnCount; y++) {
addCell(x, y);
}
}
}
function addCell(x, y) {
map[x] = map[x] || [];
map[x][y] = x + '|' + y;
}
var map = [];
createMap(4, 8);
console.log(map[3][7]);
console.log(map);
使用Array.from
的方法。
function createMap(rowCount, columnCount) {
map = Array.from(
{ length: rowCount }, // take rowCount as length
(_, i) => Array.from( // fill with new array
{ length: columnCount }, // take columnCount for every row
(_, j) => [i, j].join('|') // initialize cell with some value
)
);
}
var map;
createMap(4, 8);
console.log(map[3][7]);
console.log(map);
答案 2 :(得分:2)
你的解决方案实际上并不是那么遥远。不过,你是对的,你不能初始化像let a = [][]
这样的二维数组。如果只为for循环添加一行,那么您的解决方案也会生成类似于地图的结构:
在createMap()
函数中,您只需要使用数组初始化数组的每个字段,之后您可以填充此数组的字段:
function createMap() {
for (let x = 0; x < 10; x++) {
map[x] = []; // initialize map[x] as an array
for (let y = 0; y < 10; y++) {
addCell(x, y);
}
}
}
并将map
初始化为一个简单数组。
这是一个有效的例子:
let map = [];
createMap();
console.log(map);
function createMap() {
for (let x = 0; x < 5; x++) {
map[x] = [];
for (let y = 0; y < 5; y++) {
addCell(x, y);
}
}
}
function addCell(x, y) {
map[x][y] = cell(x,y); // create a new object on x and y
}
function cell(x,y) {
return (x+1)+":"+(y+1);
}
答案 3 :(得分:2)
不确定您是否在创建网格或显示网格时遇到问题。
这是创建它的另一种方法:
xml = '''
<x id = '123'>
<b><c>abcd</c></b>
</x>
<x id ='456'>
<z></z>
</x>
<x id ='567'>
<c>def</c>
</x>'''
soup = BeautifulSoup(xml, 'html.parser')
for x in soup.find_all('x'):
if x.find('c'):
x.decompose()
print(soup)
以下是显示网格的两种方法:
<x id="456">
<z></z>
</x>
答案 4 :(得分:0)
这是一种不依赖任何重新分配或变异的功能方法:
const lengthX = 5;
const lengthY = 2;
const map = Array.from({ length: lengthX }, (_, colIndex) => (
Array.from({ length: lengthY }, (_, rowIndex) => (
// some element to put in each, for example
{ foo: 'bar'}
))
));
console.log(map);
&#13;
colIndex
和rowIndex
是可选的,它们不会在此代码段中使用,但如果您需要根据其在网格中的位置创建元素,那么它们就是要使用的变量。
答案 5 :(得分:0)
试试这个:
$message.MailboxName
$message.MessageID
答案 6 :(得分:0)
var grid=[];
var grid_length=10; //mathematical length
var grid_width=10; //mathematical width
function pos(x,y){
return (y*grid_length)-grid_length-1+x-2;
}
function replaceItem(x,y,item){
grid[pos(x,y)]=item;
}
var itemsRequested=[];
function iRequest(x,y){ // get Item on grid.
itemsRequested.push(grid[pos(x,y)]); // this both adds the Object to a list and returns it
return grid[pos(x,y)];
}
此方法仅生成数学网格,您可以使用pos()
函数进行引用。
然后回答你的问题以获得3,7上的对象,你只需说
var a=iRequest(3,7);
//currently would return undefined because there are no objects in the array.
使用此方法时,1,1是左上角,pos(1,1)
将返回0.