Получить доступ к щипковому объекту, используя javascript и lodash - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть массив пользователей в моем javascript. Для каждого пользователя я сравниваю, появляется ли этот пользователь в другом списке.

var users = USERS.getUsers();

for (var i = 0; i < users.length; i++) {
    var u = users[i];
    if (util.pluck(myList.adminUsers, 'email').includes(u.email)) {
        // How do I check the value of the plucked value for myList.adminUsers.locationId ? 
        u.status = "admin";
    } 
}

users - массив пользовательских объектов.

[{...}]
    0:
        id: "1"
        email: "johndoe@gmail.com"
        firstname: "John"
        lastname: "Doe"
        roleid: "1" 
        _proto__: Object
    1:
        id: "2"
        email: "janedoe@gmail.com"
        firstname: "Jane"
        lastname: "Doe"
        roleid: "1"
        _proto__: Object

myList.adminUsers - также массив пользовательских объектов, но также с locationId.

[{...}]
    0:
        id: "1"
        email: "johndoe@gmail.com"
        firstname: "John"
        lastname: "Doe"
        roleid: "1"
        locationId: "123"
        _proto__: Object

Мне нужно сравнить другое поле в этой проверке. Так что мне нужно посмотреть, есть ли у выловленного объекта из myList.adminUsers поле locationId, равное x, но я не уверен, как это сделать?

Как я могу получить доступ к выдернутому объекту, чтобы Я могу проверить значение locationId?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Это должно дать вам список администраторов, которые находятся в списке пользователей и находятся в идентификаторе местоположения, который вы указываете в качестве значения (я установил его как переменную).

const users = [
  {
    id: "1",
    email: "johndoe@gmail.com",
    firstname: "John",
    lastname: "Doe",
    roleid: "1" 
  },
  {
    id: "2",
    email: "janedoe@gmail.com",
    firstname: "Jane",
    lastname: "Doe",
    roleid: "1"
  }
];

const admins = [
  {
    id: "1",
    email: "johndoe@gmail.com",
    firstname: "John",
    lastname: "Doe",
    roleid: "1",
    locationId: "123"
  }
];

const locationIdToFind = '123';

const adminsWithLocation = _.intersectionWith(admins, users, (admin, user) => _.isEqual(admin.email, user.email) && _.isEqual(admin.locationId, locationIdToFind));

console.log(adminsWithLocation);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
0 голосов
/ 14 февраля 2020

Используйте findWhere вместо pluck. Вы можете дать ему объект, содержащий все свойства, которые вы хотите соответствовать.

if (util.findWhere(myList.adminUsers, {email: u.email, locationId: u.locationId})) {
    u.status = "admin";
}
...