如何更新对象数组

How to update an array of objects?

本文关键字:对象 数组 更新 何更新      更新时间:2023-09-26

例如

{
  id:"monday",
  names:[
    {one:"white", two:"pink"},
    {uno:"blanco", dos:"rosado"}
  ]
}

如何将white变为black ?
到目前为止,我得到了这个:

r.db.table.get('monday').update({
  names: r.row("names").nth(0)
})

指定names的第0个索引,但不确定如何进一步指定one字段然后更改

到目前为止,您所拥有的是非常正确的,但您将names替换为其第一个子对象(我猜您已经看到了该结果)。

您只需要使用merge来更改子对象,并在names上使用changeAt来将更改后的子对象放入数组,就像这样:

r.db.table.get('monday').update({
  names: r.row('names').changeAt(0, r.row('names').nth(0).merge({one: 'black'}))
})

希望这对你有帮助!

也许你的数据存储在一个名为obj的对象中;比如

var obj = {...}

你可以这样做:

obj.names[0].one = "black";

我实际上已经用firebug试过了,没有问题。数组中的每个元素都是独立的,所以不用担心。

首先,您应该使用replace而不是update

  1. 获取没有names字段的记录
  2. merge用新的names(删除第一个元素,在第一个位置添加新元素,我们在one字段中将white替换为black)

像这样:

   r.db.table.get('monday').replace(function(doc){
      return doc.without({names:  true}). merge({
        names: doc("names").deleteAt(0).prepend(doc("names").nth(0).merge({
          one : "black" 
        }))
      })
    })