Объедините filter () и launchWith () для фильтрации массива - PullRequest
0 голосов
/ 25 апреля 2018

Предположим, у меня есть константа массива следующим образом:

const people = [
      { first: 'John', last: 'Doe', year: 1991, month: 6 },
      { first: 'Jane', last: 'Doe', year: 1990, month: 9 },
      { first: 'Jahn', last: 'Deo', year: 1986, month: 1 },
      { first: 'Jone', last: 'Deo', year: 1992, month: 11 },
      { first: 'Jhan', last: 'Doe', year: 1989, month: 4 },
      { first: 'Jeon', last: 'Doe', year: 1992, month: 2 },
      { first: 'Janh', last: 'Edo', year: 1984, month: 7 },
      { first: 'Jean', last: 'Edo', year: 1981, month: 8},
];

И я хочу вернуть ценность каждому, кто родился в 80-х.

Моя текущая рабочая функция для достижения этой цели:

const eighty = people.filter(person=> {
    if (person.year >= 1980 && person.year <= 1989) {
        return true;
    }
});

Мой вопрос: Можно ли использовать startWith () вместе с filter () для замены:

if (person.year >= 1980 && person.year <= 1989) {
    return true;
}

с startsWith('198') вместо?

Если да, то как правильно это сделать?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Это не совсем то, что вы просили, извините, но если вы заинтересованы в решении проблемы за одну операцию, а не с использованием startsWith, вы можете сделать это численно ...

Math.floor(person.year / 10) === 198

Это может быть немного более эффективно, так как нет преобразования строк и не имеет проблем с другими строками, начинающими аналогичное сопоставление.

0 голосов
/ 25 апреля 2018

Да, вы можете:

people.filter(person => String(person.year).startsWith('198'));

Однако вы, вероятно, не хотите этого, потому что вы можете столкнуться со странными вещами, когда год недействителен (например, если бы это был 19812).

Вместо этого вам лучше использовать регулярное выражение:

people.filter(person => /^198\d$/.test(person.year));

Это будет соответствовать годам 1980-х годов.Вам также не нужно делать дополнительный актерский состав, так что это немного чище.

0 голосов
/ 25 апреля 2018

Вы можете сделать

people.filter(person => String(person.year).startsWith('198'))

const people = [
      { first: 'John', last: 'Doe', year: 1991, month: 6 },
      { first: 'Jane', last: 'Doe', year: 1990, month: 9 },
      { first: 'Jahn', last: 'Deo', year: 1986, month: 1 },
      { first: 'Jone', last: 'Deo', year: 1992, month: 11 },
      { first: 'Jhan', last: 'Doe', year: 1989, month: 4 },
      { first: 'Jeon', last: 'Doe', year: 1992, month: 2 },
      { first: 'Janh', last: 'Edo', year: 1984, month: 7 },
      { first: 'Jean', last: 'Edo', year: 1981, month: 8},
];

var filtered = people.filter(p => String(p.year).startsWith('198'));

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