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

const usersLanguageData = {
  transactionId: 6847655349501841000,
  count: 5,
  providerList: [
    {
      code:['US'],
      weekendOfficeHours: false
    },
    {
      code:['US','IND'],
      weekendOfficeHours: true
    },
    {
      code:['US','IND','AUS'],
      weekendOfficeHours: false
    },
    {
      code:[],
      weekendOfficeHours: false
    },
    {
      weekendOfficeHours: true
    }
  ]
};

let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
  return filterKeyName1.every(function(a) {
      console.log(e[a])
      return filterValue1.includes(e[a]);
  });
});

console.log(filteredProviderData);

Здесь фрагмент кода отображает usersLanguageData в форме объекта.Здесь я хочу отфильтровать значения ключом, скажем, например, здесь filterKeyName1 = ['code'] и filterValue1 = ['IND', 'US'], он отобразит 2-й и 3-й объект в объект usersLanguageData.Точно так же есть filterValue2, который находится в закомментированной строке, он будет отображать 1-й, 2-й и 3-й объект из usersLanguageData.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Вы можете фильтровать по значению и по свойству объекта или по пустому массиву.

const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [{ code: ['US'], weekendOfficeHours: false }, { code: ['US','IND'], weekendOfficeHours: true }, { code: ['US','IND','AUS'], weekendOfficeHours: false }, { code: [], weekendOfficeHours: false }, { weekendOfficeHours: true }] };

let key = "code";
let values = ['IND','US'];
let result = usersLanguageData.providerList
    .filter(o => values.every(v => (o[key] || []).includes(v)));

console.log(result);
1 голос
/ 17 апреля 2019

вы должны снова использовать every() внутри функции.А также используйте, чтобы проверить, существует ли e[a] перед использованием every(), потому что один из ваших предметов не имеет code key

const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [ { code:['US'], weekendOfficeHours: false }, { code:['US','IND'], weekendOfficeHours: true }, { code:['US','IND','AUS'], weekendOfficeHours: false }, { code:[], weekendOfficeHours: false }, { weekendOfficeHours: true } ] };

let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
  return filterKeyName1.every(function(a) {
      console.log(e[a])
      return e[a] && filterValue1.every(x => e[a].includes(x));
  });
});

console.log(filteredProviderData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...