控制台的数组里面看着是一个对象,展开数组后有3个对象,是啥原因
时间: 2024-02-20 08:02:00 浏览: 66
这种情况一般是因为 JavaScript 中的对象是引用类型,在控制台中展示时,会显示引用的地址。如果数组中有多个元素引用同一个对象,那么控制台在展示数组时,会折叠相同的引用,只展示一次。但是,当您展开数组时,控制台会展示每个元素的具体内容,因此会有多个对象展示出来。
举个例子,假设有以下代码:
```
const obj = { name: 'Tom' };
const arr = [obj, obj, obj];
console.log(arr);
```
在控制台中,会显示一个包含三个元素的数组,每个元素都是同一个对象的引用。展开数组后,会显示三个相同的对象。这是因为数组中的每个元素都指向同一个对象,而控制台在展示数组时会折叠相同的引用。但是,展开数组后会显示每个元素的具体内容,因此会有三个相同的对象展示出来。
相关问题
在控制台输出数组中的每一个对象
在控制台打印数组中的每个对象,通常涉及到遍历数组并逐个输出对象的属性或值。这取决于你使用的编程语言和对象的具体结构。以下是一个简单的示例:
**JavaScript (ES6)**:
```javascript
let array = [ { name: 'Tom', age: 25 }, { name: 'Jerry', age: 40 } ];
array.forEach(obj => {
console.log(`Name: ${obj.name}, Age: ${obj.age}`);
});
```
**Python**:
```python
arr = [{'name': 'Tom', 'age': 25}, {'name': 'Jerry', 'age': 40}]
for obj in arr:
print(f"Name: {obj['name']}, Age: {obj['age']}")
```
**Java (使用`System.out.println()`)**:
```java
String[] array = {"Tom", "Jerry"};
for (String obj : array) {
System.out.println("Name: " + obj);
}
```
如果对象有复杂结构,可能需要递归或额外的处理才能打印完整。
利用控制台和二维对象数组绘制一个游戏地图,大小是30×30,有地图独有的标记
在控制台程序中,你可以通过ASCII字符或者更现代的终端API来构建一个2D对象数组表示的游戏地图。这里我会给出一个基本的概念和示例,假设我们用简单的字符来代表地图的不同区域。
首先,创建一个30x30的对象数组,每个元素可以是一个自定义的MapCell对象,包含状态(如空地、敌方基地、玩家基地等)、颜色代码等信息:
```java
public class MapCell {
public enum State { EMPTY, ENEMY_BASE, PLAYER_BASE }
private State state;
// 其他属性如颜色代码
}
MapCell[][] gameMap = new MapCell[30][30];
```
然后填充地图,比如使用`.`表示空地,`E`表示敌方基地,`P`表示玩家基地:
```java
for (int i = 0; i < 30; i++) {
for (int j = 0; j < 30; j++) {
switch (i % 5) { // 随机分配基地位置
case 0:
gameMap[i][j] = new MapCell(MapCell.State.PLAYER_BASE);
break;
case 4:
gameMap[i][j] = new MapCell(MapCell.State.ENEMY_BASE);
break;
default:
gameMap[i][j] = new MapCell(MapCell.State.EMPTY);
}
System.out.print(gameMap[i][j].getState().toString());
}
System.out.println(); // 换行
}
```
最后,你可以利用游戏循环读取这个二维数组并更新它,当用户或AI操作时改变某些cell的状态。
阅读全文