Javascript 如何在特定索引处替换列表中的元素
阅读时,他们说我可以在列表中添加一个元素,但我正在尝试,它不断向文档中添加一个新项,其键为arrayName[index],如下所示: 我正在尝试此查询:Javascript 如何在特定索引处替换列表中的元素,javascript,amazon-web-services,amazon-dynamodb,aws-sdk,Javascript,Amazon Web Services,Amazon Dynamodb,Aws Sdk,阅读时,他们说我可以在列表中添加一个元素,但我正在尝试,它不断向文档中添加一个新项,其键为arrayName[index],如下所示: 我正在尝试此查询: await documentClient.transactWrite({ TransactItems: [{ Update: { TableName: recordsTable, Key: { id: selectedRec.id }, Updat
await documentClient.transactWrite({
TransactItems: [{
Update: {
TableName: recordsTable,
Key: { id: selectedRec.id },
UpdateExpression: 'SET #k1 = :v1',
ExpressionAttributeNames: {
'#k1': `occurrences[${idx}]`, // idx = 245
},
ExpressionAttributeValues: {
':v1': selectedOccurrence, // a map object
},
}
}, {
// another query irrelevant to problem
}]
}).promise();
这就是本文件的结尾:
它应该替换引用数组中索引245中的对象,但它在我的文档中添加了一个带有关键字引用[245]的新映射
我做错了什么?表达式属性中不能包含下标。只能指示属性名称 有两种方法可以解决此问题:
UpdateExpression: `SET #k1[${idx}] = :v1`,
ExpressionAttributeNames: { '#k1': 'occurrences' }
或:
请注意,如果属性名为a,则第二种解决方案将不起作用。是否尝试不使用属性名映射?例如:UpdateExpression:SET引用[${idx}]=:v1@jarmod是的,它确实起作用了!为什么使用ExpressionAttributeNames购买不起作用?不确定为什么不支持名称替换步骤,但我并不感到惊讶。可能与评估事物的顺序有关。您还可以尝试:UpdateExpression:SET k1[${idx}]=:v1仍然提供属性名称映射,以查看这是否有效。
UpdateExpression: `SET occurrences[${idx}] = :v1`