Как получить соответствующий элемент из массива? - PullRequest
0 голосов
/ 17 января 2019

пытается получить результат ниже ожидаемого, но цикл не входит в specialtyMembers есть идеи, как получить ожидаемый ответ, совпадающий с двумя массивами, любое приложение использует фильтр?

main.js

const members = [{
    "indexId": "1",
    "planId": "8304TDMACC001"
}]

const specialtyMembers = [{
        "proxyId": "",
        "internalID": "38482099",
        "externalID": "",
        "indexID": "1",
        "gender": "Male"
    },
    {
        "proxyId": "",
        "internalID": "38482100",
        "externalID": "",
        "indexID": "2",
        "gender": "Female"
    }
]

if (members) {
    const membersArray: any = [];
    for (const member of members) {
        if (specialtyMembers) {
            for (const cacheMember of specialtyMembers) {
                if (member.indexId === cacheMember.indexID) {
                    membersArray.push(cacheMember);
                }
            }
        }
    }
    specialtyMembers = membersArray;
}

ожидаемый результат, потому что indexId совпадает только с этим

 [{
        "proxyId": "",
        "internalID": "38482099",
        "externalID": "",
        "indexID": "1",
        "gender": "Male"
    }
]

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Просто filter через массив specialtyMembers, например:

specialtyMembers = specialtyMembers.filter(e => members[0].indexId == e.indexID);

Примечание: вам придется изменить specialtyMembers с константы на переменную. Для этого измените const на var в этой строке:

var specialtyMembers = [{...}, {...}];

Демонстрация:

const members = [{
  "indexId": "1",
  "planId": "8304TDMACC001"
}];

var specialtyMembers = [{
    "proxyId": "",
    "internalID": "38482099",
    "externalID": "",
    "indexID": "1",
    "gender": "Male"
  },
  {
    "proxyId": "",
    "internalID": "38482100",
    "externalID": "",
    "indexID": "2",
    "gender": "Female"
  }
];

specialtyMembers = specialtyMembers.filter(e => members[0].indexId == e.indexID);

console.log(specialtyMembers);

EDIT:

Если в members есть несколько элементов, вам просто нужно сделать массив из indexId s следующим образом:

var indexIds = members.map(e => e.indexId);

Затем измените выражение filter на следующее:

specialtyMembers = specialtyMembers.filter(e => indexIds.includes(e.indexID));

Демонстрация:

const members = [{
  "indexId": "1",
  "planId": "8304TDMACC001"
}];

var specialtyMembers = [{
    "proxyId": "",
    "internalID": "38482099",
    "externalID": "",
    "indexID": "1",
    "gender": "Male"
  },
  {
    "proxyId": "",
    "internalID": "38482100",
    "externalID": "",
    "indexID": "2",
    "gender": "Female"
  }
];

var indexIds = members.map(e => e.indexId);

specialtyMembers = specialtyMembers.filter(e => indexIds.includes(e.indexID));

console.log(specialtyMembers);
0 голосов
/ 17 января 2019

const members = [{
  "indexId": "1",
  "planId": "8304TDMACC001"
}]

const specialtyMembers = [{
    "proxyId": "",
    "internalID": "38482099",
    "externalID": "",
    "indexID": "1",
    "gender": "Male"
  },
  {
    "proxyId": "",
    "internalID": "38482100",
    "externalID": "",
    "indexID": "2",
    "gender": "Female"
  }
]


if (members) {
  let memberIndexes = new Set(members.map(m => m.indexId))

  let result = specialtyMembers ? specialtyMembers.filter(m => memberIndexes.has(m.indexID)) : []
  console.log(result)

}
0 голосов
/ 17 января 2019

Использование может использовать reduce для создания нового массива только с элементами, которые передают ваше условие, используя filter:

specialtyMembers = members.reduce((acc, ele) => {
    const filteredArr = specialtyMembers.filter(x => ele.indexId === x.indexID)
    return filteredArr.length > 0 ? acc.concat(filteredArr) : acc;
}, [])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...