首页 > 解决方案 > Lodash:根据条件在多级Json中查找并添加项目

问题描述

我正在尝试根据条件将项目添加到“角色数组”。

我的json:

[{
    "unitId": "2",
    name: "elizabeth",
    roles: [{
      "role": {
        "roleId": "2",
        roleName: "testing"
      }
    }, {
      "role": {
        "roleId": "5",
        roleName: "dev"
      }
    }]
  },
  {
    "unitId": "3",
    name: "peter",
    roles: [{
      "role": {
        "roleId": "1",
        roleName: "testing"
      }
    }, {
      "role": {
        "roleId": "2",
        roleName: "dev"
      }
    }]
  }
]

let newRole = { "role":{"roleId" : "6", roleName: "BA"}}

预期结果:将 newRole 添加到角色数组后。

[{
    "unitId": "2",
    name: "elizabeth",
    roles: [{
      "role": {
        "roleId": "2",
        roleName: "testing"
      }
    }, {
      "role": {
        "roleId": "5",
        roleName: "dev"
      }
    }, {
      "role": {
        "roleId": "6",
        roleName: "BA"
      }
    }]
  },
  {
    "unitId": "3",
    name: "peter",
    roles: [{
      "role": {
        "roleId": "1",
        roleName: "testing"
      }
    }, {
      "role": {
        "roleId": "2",
        roleName: "dev"
      }
    }]
  }
]

这里对于unitId:2,我正在尝试向“角色数组”添加一个新角色。我尝试了 lodash 的过滤器和推送,但是没有用。

标签: ecmascript-6lodash

解决方案


如果我理解正确,您正在尝试添加基于“unitId”的新角色。希望这可以帮助。

const a = [{
    "unitId": "2",
    name: "elizabeth",
    roles: [{"role": {"roleId": "2", roleName: "testing"}}, {"role": {"roleId": "5", roleName: "dev"}}]
}, {
    "unitId": "3",
    name: "peter",
    roles: [{"role": {"roleId": "1", roleName: "testing"}}, {"role": {"roleId": "2", roleName: "dev"}}]
}];

const newRole = { "role":{"roleId" : "6", roleName: "BA"}};

const insert = (arr, id, newRole) => {

    const whereToPush = arr.find((item) => item.unitId === id);

    if (whereToPush) whereToPush.roles.push(newRole);
};

insert(a, '2', newRole);

console.log(a);


推荐阅读