Zor*_*gan 2 node.js firebase google-cloud-platform google-cloud-functions google-cloud-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);
Run Code Online (Sandbox Code Playgroud)
上面返回此错误:
transaction failure: Error: Element at index 0 is not a valid array element. Nested arrays are not supported.
Run Code Online (Sandbox Code Playgroud)
所以如果我知道这些值就好了,因为我可以做这样的事情:
remainingPlayers: admin.firestore.FieldValue.arrayRemove("player1", "player2")
Run Code Online (Sandbox Code Playgroud)
但是我还没有找到使参数动态化的方法arrayRemove()。
任何想法?
您需要使用Spread 运算符,如下所示,以便将 的所有元素作为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);
Run Code Online (Sandbox Code Playgroud)
请注意,数组中至少应有一个元素,否则您将arrayRemove()使用 0 个参数进行调用,而它需要至少 1 个参数。remainingPlayers因此,您可以在将属性分配给对象之前检查数组长度update。
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |