Lodash: найти и добавить элемент в многоуровневый Json в зависимости от условий - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь добавить элемент в «массив ролей» на основе условия.

Мой 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, я пытаюсь добавитьnewRole для "массива ролей".Я попробовал фильтр Лодаша и толкнул, но это не сработало.

1 Ответ

0 голосов
/ 23 октября 2018

Если я правильно понимаю, вы пытаетесь добавить новую роль, основанную на "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);
...