问题描述:
假设我们使用数组实现一个抽象数据类型(ADT),如果数组中的元素是对象,则需要更改元素中的某些字段。数组可能有多个元素,但在更改单个元素的字段时,可能会出现问题。
代码示例:
class ADT { constructor() { this.array = []; }
add(item) {
this.array.push(item);
}
// 更改数组中的元素的某个字段
changeField(index, field, value) {
this.array[index].field = value; // 这里的field应替换为传入的字段名
}
}
const adt = new ADT(); adt.add({name: 'Alice', age: 21}); adt.add({name: 'Bob', age: 25}); adt.changeField(0, 'name', 'Mallory'); // 将名字从'Alice'更改为'Mallory' console.log(adt.array[0]); // 输出应为:{name: 'Mallory', age: 21}
问题分析:
在changeField方法中,我们试图通过属性名(即field)更改数组中某个元素的字段。但是,由于我们使用了不正确的语法,因此代码无法正常执行。换句话说,我们需要使用一个变量来表示属性名,而不是直接在代码中写死属性名。
解决方案:
使用方括号符号([])来访问属性,变量名代替属性名,如下所示:
changeField(index, field, value) { this.array[index][field] = value; }
这种语法允许我们使用变量(field)来访问属性,因此我们可以正确地更改对象中的字段。
代码示例:
class ADT { constructor() { this.array = []; }
add(item) {
this.array.push(item);
}
// 更改数组中的元素的某个字段
changeField(index, field, value) {
this
上一篇:ADTRestAPI的POST命令返回“HTTP/1.1405MethodNotAllowedAllow:DELETE,GET,PATCH,PUTContent-Length:0”
下一篇:ADT字典-二叉搜索树