node.js - 如何动态地从 Firestore 数组中删除多个元素?

我想从我的 Firestore 数组中删除多个元素:

var eliminatedThisRound = []

for (const player in players){
    if (players[player].eliminated === false && players[player].answer !== answer) {
        eliminatedThisRound.push(players[player].uid);
    }
}
var update = {
    roundFinished: true,
    nextRound: date.valueOf() + 12000,seconds
    players: updatedPlayers,
    remainingPlayers: admin.firestore.FieldValue.arrayRemove(eliminatedThisRound)
}
await t.update(gameRef, update);

上面返回这个错误:

transaction failure: Error: Element at index 0 is not a valid array element. Nested arrays are not supported. 

所以如果我知道这些值就好了,因为我可以这样做:

remainingPlayers: admin.firestore.FieldValue.arrayRemove("player1", "player2")

但是我还没有找到制作arrayRemove()参数的方法动态的。

有什么想法吗?

最佳答案

您需要使用 Spread operator ,如下所示,以便将 eliminatedThisRound 的所有元素作为参数传递给 arrayRemove() 方法。

var eliminatedThisRound = []

for (const player in players){
    if (players[player].eliminated === false && players[player].answer !== answer) {
        eliminatedThisRound.push(players[player].uid);
    }
}
var update = {

    // ...

    admin.firestore.FieldValue.arrayRemove(...eliminatedThisRound)
}

await t.update(gameRef, update);

请注意,您应该在数组中至少有一个元素,否则您将使用 0 个参数调用 arrayRemove(),而它至少需要 1 个参数。因此,您可以在将 remainingPlayers 属性分配给 update 对象之前检查数组长度。

https://stackoverflow.com/questions/65547447/

相关文章:

c# - 有没有办法在 Switch 表达式中跳过或继续,或者每个分支都需要返回一些东西?

python - numpy 中的 3d 矩阵乘法

reactjs - firebase safari 错误消息 : This browser does

typescript - TypeScript 如何推断回调参数类型

r - 无法为 R 中的列表替换 NA 的拼写错误

java - 更正应包含单个兼容版本的应用程序的类路径

hash - 如何从 elixir 中的 map 创建 `hash` 或 `md5`?

c - STM32创建RAM段

scala - 基于Map从List[String]转换为List[Int]

python - Pandas:如何用另一个值替换 int 子字符串