TypeError:无法分配给字符串的只读属性'0'

TypeError: Cannot assign to read only property #39;0#39; of string(TypeError:无法分配给字符串的只读属性#39;0#39;)
本文介绍了TypeError:无法分配给字符串的只读属性'0'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一款终端游戏。游戏场地被字段(░)和洞(O)占据

该字段是随机生成的,但我还希望确保路径字符(*)始终位于该字段的左上角(由一定数量的数组组成) 为此,我将第一个数组的第一个索引分配给了pathCharacter(*)。请参阅下面的代码:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
String.prototype.replaceAt = function(index, replacement) {
  return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}

hat = '^';

hole = 'O';

fieldCharacter = '░';

pathCharacter = '*';

class Field {
  constructor(field) {
    this._field = field;
  }

  print() {
    this._field = field.join('
');
    console.log(this._field.replace(/,/g, ''))
  }

  static generateField(height, width) {
    let finalArray = []
    for (let i = 0; i < height; i++) {
      finalArray.push(fieldCharacter.repeat(width));
    }
    for (let i = 0; i < finalArray.length; i++) {
      let randomHoleX = Math.floor(Math.random() * width);
      let randomHoleY = Math.floor(Math.random() * height);
      finalArray[randomHoleY] = finalArray[randomHoleY].replaceAt(randomHoleX, hole);
    }

    // what I tried to do
    finalArray[0][0] = pathCharacter;
    return finalArray.join('
').replace(/,/g, '');
  }
}

console.log(Field.generateField(5, 10));

输出内容:类型错误:无法分配给字符串‘░░O░░░░░░O’的只读属性‘0’

我想要的示例:

*░░O░░░░░O
░░░░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
░░░O░O░░░░

推荐答案

有许多我需要解决的问题。

  • 首先,您确实不应该向String.prototype添加您自己的方法;如果您想要任何类型的可维护性,那么这种方法就是疯狂的。
  • 第二,您的print()方法不能工作(它引用隐式全局field来修改实例字段_field),但这并不意味着您无论如何都在使用它。
  • 您可能应该使用数组数组而不是字符串,以减少操作的笨拙。
  • 您不需要Field的类:
const hat = "^";
const hole = "O";
const fieldCharacter = "░";
const pathCharacter = "*";

function generateField(height, width) {
  const field = [];
  for (let y = 0; y < height; y++) {
    field.push(Array.from(fieldCharacter.repeat(width)));
  }
  for (let y = 0; y < field.length; y++) {
    const randomHoleY = Math.floor(Math.random() * height);
    const randomHoleX = Math.floor(Math.random() * width);
    field[randomHoleY][randomHoleX] = hole;
  }

  field[0][0] = pathCharacter;
  return field;
}

function printField(field) {
  for (let y = 0; y < field.length; y++) {
    console.log(field[y].join(""));
  }
}

const field = generateField(5, 10);
printField(field);

此输出

*░░░░░░░░░
░░O░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
O░O░░░O░░░

这篇关于TypeError:无法分配给字符串的只读属性&#39;0&#39;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)