修改数组字符串的值
Change value of array string
我目前正在使用一个数组来存储我正在创建的基于文本的游戏的位置数据。
我试图相应地编辑数组中的每个字符串,例如,如果我的数组是['___','_1_','___']
, 1
是字符,_
是空白;也保持我的字符位置在另一个数组([1,1]
);如果我尝试将角色向上移动1并将其位置替换为哈希(#
),则不会起作用。我可以很好地编辑位置数组,但不能编辑其他内容。
map[pos[1] - 1][pos[0]] = '1';
map[pos[1]][pos[0]] = '#';
pos[1] = pos[1] - 1;
这就是我现在使用的,但实际上只有第三行有效。如果我运行这一次,地图数组将仍然是['___','_1_','___']
,但我的位置数组将改变为[1,0]
。
更改映射值以满足我的需求的最佳方法是什么?
最好的方法是分离关注点,以免混淆。首先,在给定位置替换字符串中的字符的能力。(从别处)
String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
}
接下来是在特定ascii数组中执行此操作的能力。
replaceInAsciiMap = function(array, row, index, character) {
array[row] = array[row].replaceAt(index, character);
}
现在您可以添加函数来更新整数数组和ascii数组,获取旧位置和新位置,等等。总而言之:首先是原子,然后是分子,然后是蛋白质,然后是细胞,然后是生物体……
问题是字符串不能被修改。您必须创建一个新的字符串。
数组表示法可能会引起误解,charAt
表示法显然是只读的。
然后,如果你想改变一个字符串的给定字符,你可以使用
function changeStr(str, pos, newChar) {
return str.substring(0, pos) + newChar + str.substring(pos+1);
}
像这样使用:
var map = ['___','_1_','___'], pos = [1,1,];
map[pos[1] - 1] = changeStr(map[pos[1] - 1], pos[0], '1');
map[pos[1]] = changeStr(map[pos[1]], pos[0], '#');
pos[1] = pos[1] - 1;
在您的示例中,由于要修改数组中的字符串,因此可以将上面的代码简化为
function changeArrStr(arr, key, pos, newChar) {
arr[key] = arr[key].substring(0, pos) + newChar + arr[key].substring(pos+1);
}
var map = ['___','_1_','___'], pos = [1,1,];
changeArrStr(map, pos[1] - 1, pos[0], '1');
changeArrStr(map, pos[1], pos[0], '#');
pos[1] = pos[1] - 1;
相关文章:
- 将JSON转换为typescript中的字符串数组
- 在Javascript中将一个值和字符串数组转换为if语句
- 如何将正则表达式包含到字符串数组中
- JavaScript:将字符串数组转换为文本区域
- Knockout中的字符串数组
- 拆分字符串数组(JavaScript)后未定义
- 使用Javascript获取两个字符串之间的字符串数组
- 打印从Spring MVC Controller发送的字符串数组只显示“;toJSON”;在javascript中
- 将一个字符串数组解析为一个新的数组javascript
- AngularJS - 从字符串数组中连续更改文本
- 使用字符串数组中的字符填充 HTML 表
- 如何在 Javascript 中将字符串数组列表插入到表行中
- 创建二维字符串数组
- 如何从字符串数组中获取子字符串数组
- 如何将字符串数组转换为简单数组
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- 如何从字符串数组中获得8个随机唯一元素
- json_encode($myVar);正在给出地图,我想要一个字符串数组
- 函数,返回javascript中两个字符串数组的差值
- Javascript字符串数组转换为用逗号分隔的多个字符串