this.tiles.map((x) => [x]).filter(x => x !== deletedTile) = reopenTile;
我尝试这样,但在过滤器块中它说:
赋值表达式的左侧必须是变量或属性访问。
我尝试这样:
this.tiles[this.tiles.map((x) => [x]).filter(x => x !== deletedTile)] = reopenTile;
但它给出了:
类型 'TileData[][]' 不能用作索引类型。
我想替换deletedTile为reopenTile. 怎么了?
PS基于此解决方案:
var items = Array(523, 3452, 334, 31, 5346);
items[items.map((e, i) => [i, e]).filter(e => e[1] == 3452)[0][0]] = 1010
第一个参数是索引(在tiles数组中找到deletedTile的位置) :,
tiles.findIndex(t => t === deletedTile)第二个参数是要删除的元素数量:
1,第三个参数,然后是要插入的元素(从同一索引开始):仅
reopenTile.MDN 上的Array.prototype.splice
ps:该值
reopenTile是对象类型,即通过引用传递。通过上述变量对此值的任何更改也将反映在数组中的值中tiles。pps:答案中的代码继承了问题代码中的算法缺陷 - 缺少检查以
deletedTile查看tiles.此外:
如果
deletedTile是对数组元素中对象的引用tiles(如示例中所示),findIndex则最好使用较快的indexOf。通过以下方式检查
deletedTile数组中是否存在的tiles选项if:或者,使用三元运算符:
在这里,如果数组中没有所需的对象,我们将
Infinity其作为索引传递 - 将reopenTile添加到数组的末尾,无论其长度如何。第二个参数splice没有效果(因为在数组的最后一个元素之后,没有什么要删除的)。