Lodash: своп ключ с внутренним атрибутом объекта значения - PullRequest
0 голосов
/ 06 июля 2018

Я получаю ответ ниже JSON:

users: {
    1: {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
    2: {
        name: "Alex",
        email: "alex@test.com",
        id: 2,
        place: "FL"
    },
    3: {
        name: "Tony",
        email: "tony@test.com",
        id: 3,
        place: "TX"
    }
    .
    .
    .
    .
    .
    .
}

Я хочу заменить ключ идентификатора ключом электронной почты на значение внутреннего объекта, как показано ниже.

users: {
    "john@test.com": {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
}

Я использую приведенный ниже код lodash, чтобы он работал и работал нормально:

_.keyBy(_.values(data), 'email');

Есть ли лучший способ справиться с этим с помощью lodash? Я новичок в lodash и хотел понять, можно ли продолжить рефакторинг кода.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

См. _.keyBy() принимает коллекцию (массив или объект), вы можете пропустить вызов _.values():

const users = {"1":{"name":"John","email":"john@test.com","id":1,"place":"NY"},"2":{"name":"Alex","email":"alex@test.com","id":2,"place":"FL"},"3":{"name":"Tony","email":"tony@test.com","id":3,"place":"TX"}};

const result = _.keyBy(users, 'email');

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0 голосов
/ 06 июля 2018

Если вы ищете решение Vanilla JavaScript, вы можете использовать array#reduce вот так:

users =  {
    1: {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
    2: {
        name: "Alex",
        email: "alex@test.com",
        id: 2,
        place: "FL"
    },
    3: {
        name: "Tony",
        email: "tony@test.com",
        id: 3,
        place: "TX"
    }
  }

let newUsers = Object.keys(users).reduce((obj, key) => {
  obj[users[key].email] = users[key];
  return obj;
}, {});

console.log(newUsers);
...