Хотите вернуть true или false при поиске точного совпадения в массиве объектов? - PullRequest
0 голосов
/ 04 января 2019

У меня есть posList, который содержит массив объектов. Я хочу проверить, является ли введенное значение точным совпадением всех posCode в каждом объекте posList. Мой RegExp возвращает true, когда его поиск соответствует. Например, когда 4325 введено, оно возвращает истину. Я только хочу, чтобы он вернул true, если совпадение точное.

//short example
posList = [
    {
        posCode: "43252",
        description: "hi"
    },
    {
        posCode: "HTD632",
        description: "hello"
    }
]

checkPosCodeUnique = () => {
    const re = new RegExp(_.escapeRegExp(this.state.posCode), 'i');
    const isMatch = result => (re.test(result.posCode));
    const list = _.filter(this.state.posList, isMatch);
    if (list.length > 0) {
        error=true;
    }

};

Ответы [ 3 ]

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

Зачем вам нужно использовать регулярные выражения?

posList = [{
    posCode: "43252",
    description: "hi"
  },
  {
    posCode: "HTD632",
    description: "hello"
  }
]

checkPosCodeUnique = (search) => {
  return posList.some(item => { return item.posCode == search });
};

console.log(checkPosCodeUnique('43252'));
console.log(checkPosCodeUnique('HTD632'));
console.log(checkPosCodeUnique(123));
0 голосов
/ 04 января 2019

Для того, что вы описываете, вам не нужны регулярные выражения, вы можете просто отфильтровать список:

posList.filter(e => e.posCode === posCode)

См. https://codesandbox.io/s/5w95r4zmvl для реализации вашей версии и версии, использующей простой фильтр.

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

Использование some метод массивов:

console.log(posList.some(pos => pos.posCode.toUpperCase() === this.state.posCode.toUpperCase());

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