Возникли проблемы со словарем машинописи - PullRequest
0 голосов
/ 15 февраля 2019

Я создаю словарь типов:

const skills = x
        .map(y => y.skills)
        .flat(1)
        .map(z => {
          return { [z.id]: { skill: z } };
        });

Это массив, который я получаю с помощью кода выше:

{ 7ff2c668-0e86-418a-a962-4958262ee337: {skill: {…}} }
{ c6846331-2e11-45d6-ab8d-306c956332fc: {skill: {…}} }
{ 0fc0cb61-f44d-4fd0-afd1-18506380b55e: {skill: {…}} }
{ 36dc0b74-84ee-4be2-a91c-0a91b4576a21: {skill: {…}} }

Теперь проблема в том, что я не могу получить доступсловарь по ключу:

const id = '7ff2c668-0e86-418a-a962-4958262ee337';
const one = myArr.find(x => x === id); // returns undefined
const two = myArr[id]; // returns undefined

Есть идеи как исправить?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вы сейчас создаете массив объектов.Вместо этого я предлагаю вам создать объект с вашими идентификаторами в качестве ключей

Пример:

const skills = x
    .map(y => y.skills)
    .flat(1)
    .reduce((acc, z) => {
        acc[z.id] = z;
        return acc;
    }, {});

Ваш myArr будет выглядеть примерно так:

{
    '7ff2c668-0e86-418a-a962-4958262ee337': {...}
    'c6846331-2e11-45d6-ab8d-306c956332fc': {...},
    '0fc0cb61-f44d-4fd0-afd1-18506380b55e': {...},
    '36dc0b74-84ee-4be2-a91c-0a91b4576a21': {...}
}

Вы можете получить к нему доступ так, как вы хотели:

const skill = myArr['7ff2c668-0e86-418a-a962-4958262ee337'];
0 голосов
/ 15 февраля 2019

используйте карту, которая может помочь,

Map - это новая структура данных, представленная в ES6.Это позволяет хранить пары ключ-значение, как и в других языках программирования, например, Java, C #.

let map = new Map();
const skills = x
        .map(y => y.skills)
        .flat(1)
        .map(z => {
          map.set(z.Id,  { skill: z })
          return  map;
        });

//Get entries
amp.get("7ff2c668-0e86-418a-a962-4958262ee337");     //40

//Check entry is present or not
map.has("7ff2c668-0e86-418a-a962-4958262ee337");       //true
0 голосов
/ 15 февраля 2019

Вы можете использовать Object.keys(), чтобы получить ключ от каждого из ваших объектов.В вашем случае ключом каждого из ваших объектов является его идентификатор.Затем используйте это, чтобы проверить, равно ли оно x (вы ищете идентификатор).

См. Пример ниже:

const myArr = [
{"7ff2c668-0e86-418a-a962-4958262ee337": {skill: 1}},
{"c6846331-2e11-45d6-ab8d-306c956332fc": {skill: 2}},
{"0fc0cb61-f44d-4fd0-afd1-18506380b55e": {skill: 3}},
{"36dc0b74-84ee-4be2-a91c-0a91b4576a21": {skill: 4}}],

id = "36dc0b74-84ee-4be2-a91c-0a91b4576a21",
one = myArr.findIndex(x => Object.keys(x)[0] === id); // the index of the object which has the search id as its key.

myArr[one] = {newKey: "newValue"}; // set the index found to have a new object
console.log(myArr);
...