在对象数组中查找完全匹配时是否要返回true或false?

时间:2019-01-04 19:55:02

标签: javascript regex

我有一个包含对象数组的posList。我想检查输入的值是否与posList的每个对象中的所有posCode完全匹配。搜索匹配时,我的RegExp返回true。例如,当4325 输入后返回true。如果匹配完全正确,我只希望它返回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 :(得分:2)

为什么需要使用正则表达式?

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));

答案 1 :(得分:1)

使用some数组方法:

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

答案 2 :(得分:1)

对于您描述的内容,您不需要正则表达式,只需过滤列表即可:

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

有关您的版本的实现以及使用简单过滤器的实现,请参见https://codesandbox.io/s/5w95r4zmvl