Фильтрация объекта javascript с использованием .filter () - PullRequest
0 голосов
/ 08 октября 2018

Есть ли у кого-нибудь представление о таком типе фильтрации объектов javascript с использованием функции .filter ():

Допустим, у меня есть:

docs: [
{
  "name": "Mike",
  "address": "Canada",
  "gender": "Male"
},
{
  "name": "Jean",
  "address": "China",
  "gender": "Female"
},
{
  "name": "Sakura",
  "address": "England",
  "gender": "Female"
}
]

Возможно ли выполнить фильтрацию следующим образом:

name = ''
age = ''
gender = 'Female'

потому что, если вы сделаете это так:

filtered_docs = docs.filter(function (el) {
   return el.name == '' ||
      el.address == '' ||
      el.gender == 'Female';
});

вернет все.

и сделает так:

filtered_docs = docs.filter(function (el) {
   return el.name == '' &&
      el.address == '' &&
      el.gender == 'Female';
});

вернетсяничего.

ОБНОВЛЕНИЕ: Я просто хочу вернуть данные, основанные на этих условиях.Я ожидаю вернуть 2 записи с женским полом

ОБНОВЛЕНИЕ Это то, что я пытаюсь достичь enter image description here

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

ваше состояние неверно, вы фильтруете его только по полу, не нужно вводить другие поля

    filtered_docs = docs.filter(function (el) {return el.gender == 'Female';});
0 голосов
/ 08 октября 2018

Вы можете использовать objetc для пар ключ / значение для фильтрации и на первом шаге брать только те ключи, которые имеют требуемое значение, например значение truey для последующей фильтрации.

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

var docs= [{ name: "Mike", address: "Canada", gender: "Male" }, { name: "Jean", address: "China", gender: "Female" }, { name: "Sakura", address: "England", gender: "Female" }],
    filter = { name: "", age: "", gender: "Female" },
    keys = Object.keys(filter).filter(k => filter[k]),
    result = docs.filter(o => keys.every(k => o[k] === filter[k]));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 08 октября 2018

Хотите ли вы фильтровать (то есть искать в массиве и находить соответствующий объект) или вы хотите создать новый массив с полом как женский, а остальные как пустая строка?

Если вы хотите фильтроватьВаш второй метод будет работать.Он ничего не возвращает, поскольку ни один из объектов в массиве docs не соответствует условиям.

Если вы хотите создать новый массив, рассмотрите возможность использования .map ().Смотри https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

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