收藏
回答

怎么定位记录中Array中的某项并加以修改?

云数据库中数据结构如下:

{
    "_id": "dfajslfad",
    "ArrayList": [
        {
            "uid": "uid1",
            "member": [
                {
                    "name": "张三",
                    "age": 20
                },
                {
                    "name": "李四",
                    "age": 30
                }
            ]
        },
        {
            "uid": "uid2",
            "member": [
                {
                    "name": "王五",
                    "age": 25
                },
                {
                    "name": "赵六",
                    "age": 31
                }
            ]
        }
    ]
}


其中 uid 是全局唯一的,期望通过_id 和 uid 定位到某项具体的一个数组内容,然后再修改。

例如:我想修改uid为 uid2 的数组内容中的 member ,为期增加一个 {name:"增加的",age:15},这个该如何写呢?

不希望出现两次查询。

谢谢各位大神。

回答关注问题邀请回答
收藏

2 个回答

  • 无言
    无言
    2022-02-26

    因为uid是唯一的,所以遍历时有遇到匹配结果时可以直接break,这样可能有助于提高效率。

    for (let idx in data.ArrayList) {
        if (data.ArrayList[idx].uid == 'uid2') {
            data.ArrayList[idx].member.push({
                name: "增加的",
                age: 15
            });
            break;
        }
    }
    


    2022-02-26
    有用
    回复 1
    • 王卓
      王卓
      2022-02-26
      我的错,没在明显地方写明是云数据库调用,通过查询而不是JS本地。 不过也谢谢你的回答,我已经解决这个问题了。
      2022-02-26
      回复
  • 鲤子
    鲤子
    2022-02-26
    let data = {
        "_id": "dfajslfad",
        "ArrayList": [
            {
                "uid": "uid1",
                "member": [
                    {
                        "name": "张三",
                        "age": 20
                    },
                    {
                        "name": "李四",
                        "age": 30
                    }
                ]
            },
            {
                "uid": "uid2",
                "member": [
                    {
                        "name": "王五",
                        "age": 25
                    },
                    {
                        "name": "赵六",
                        "age": 31
                    }
                ]
            }
        ]
    }
    data = data.ArrayList.map( ({uid, member}) => (uid === "uid2" ? {uid, member: [...member, {name: "增加的", age: 15}]} : {uid, member}))
    console.log(data)
    
    2022-02-26
    有用
    回复 1
    • 王卓
      王卓
      2022-02-26
      我的错,没在明显地方写明是云数据库调用,通过查询而不是JS本地。 不过也谢谢你的回答,我已经解决这个问题了。
      2022-02-26
      回复
登录 后发表内容