Как проверить два слова строки отдельно с помощью Startswith et c. и отфильтруйте его в Javascript - PullRequest
0 голосов
/ 29 апреля 2020
const people = [
      { first: 'John', last: 'Doe', year: 1991, continent: "North America" },
      { first: 'Jane', last: 'Doe', year: 1990, continent: "Americas" },
      { first: 'Jahn', last: 'Deo', year: 1986, continent: "Europe" },
      { first: 'Jone', last: 'Deo', year: 1992, continent: "North America" },
      { first: 'Jhan', last: 'Doe', year: 1989, continent: "Asia" },
      { first: 'Jeon', last: 'Doe', year: 1992, continent: "Europe" },
      { first: 'Janh', last: 'Edo', year: 1984, continent: "North America" },
      { first: 'Jean', last: 'Edo', year: 1981, continent: "North America"},
];

Я могу проверить первое слово континента с помощью StartsWith, но я хочу выяснить, если я ищу «Am», оно возвращает «Северная Америка» и «Южная Америка».

Это как я в настоящее время;

const continent = people.filter(e =>
                e.continent.startsWith("Am")
            );

Это возвращает пустой []. Я пытался использовать split(""), но затем он создает массив, и у меня появляется ошибка startsith в массиве не существует. Как я могу проверить второе слово в строке, если оно содержит определенную строку? В конце я хочу оставить только объекты массива, включая «Америка», «Северная Америка», «Южная Америка».

Ответы [ 3 ]

2 голосов
/ 29 апреля 2020

Вы все еще можете использовать фильтр и разделить. Также используйте some. split создаст массив, затем с помощью some определит, начинается ли любой элемент в этом массиве с необходимыми совпадающими символами.

Например, для split North America будет ['North','America'] и some проверит, удовлетворяет ли какой-либо элемент в этом массиве требованию, затем вернет true

const people = [{
    first: 'John',
    last: 'Doe',
    year: 1991,
    continent: "North America"
  },
  {
    first: 'Jane',
    last: 'Doe',
    year: 1990,
    continent: "Americas"
  },
  {
    first: 'Jahn',
    last: 'Deo',
    year: 1986,
    continent: "Europe"
  },
  {
    first: 'Jone',
    last: 'Deo',
    year: 1992,
    continent: "North America"
  },
  {
    first: 'Jhan',
    last: 'Doe',
    year: 1989,
    continent: "Asia"
  },
  {
    first: 'Jeon',
    last: 'Doe',
    year: 1992,
    continent: "Europe"
  },
  {
    first: 'Janh',
    last: 'Edo',
    year: 1984,
    continent: "North America"
  },
  {
    first: 'Jean',
    last: 'Edo',
    year: 1981,
    continent: "North America"
  },
];


const continent = people.filter((e) => {
  const continentName = e.continent.split(' ');
  const startWith = continentName.some(item => item.startsWith("Am"));
  if (startWith) {
    return e
  }
});

console.log(continent);
1 голос
/ 29 апреля 2020

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

const
    people = [{ first: 'John', last: 'Doe', year: 1991, continent: "North America" }, { first: 'Jane', last: 'Doe', year: 1990, continent: "Americas" }, { first: 'Jahn', last: 'Deo', year: 1986, continent: "Europe" }, { first: 'Jone', last: 'Deo', year: 1992, continent: "North America" }, { first: 'Jhan', last: 'Doe', year: 1989, continent: "Asia" }, { first: 'Jeon', last: 'Doe', year: 1992, continent: "Europe" }, { first: 'Janh', last: 'Edo', year: 1984, continent: "North America" }, { first: 'Jean', last: 'Edo', year: 1981, continent: "North America"}],
    continent = people.filter(e => /(^|\s)Am/.test(e.continent));

console.log(continent);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 29 апреля 2020

Вы можете попробовать что-то вроде этого.

var filtered = people.filter(function(it) {
    return it.continent.split(" ").reduce(function(a, b) {
        return a || b.startsWith("Am")
    }, false);
});

filtered будет содержать желаемый результат. Это самое близкое к вашему исходному коду то, что вы делаете.

...