从对象数组中搜索记录-Javascript

时间:2019-06-27 11:02:54

标签: javascript

我正在为我的对象数组创建一个搜索过滤器,所以假设我有一个对象数组

let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}]

现在,如果我搜索zx,它将返回类似

的结果
[{'name': 'mn zx abc'}, {'name': 'zx mn'}]

请注意比上一个对象{'name': 'mnzx'} zx介于两者之间,所以我不希望那样,希望您理解我的问题

这是代码-

let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}];

let searchedTerm = 'zx';

let result = arr.filter(data => {
    if (data.name.charAt(0) === searchedTerm.charAt(0)) {
        return true;
    }
});

console.log(result);

4 个答案:

答案 0 :(得分:0)

您似乎正在尝试识别名称字符串包含特定“单词”而不是特定字符的对象。

一种简单的解决方法是将名称字段拆分为单词,然后检查搜索词的拆分列表。如果您的单词由空格分隔,则可以执行"mn zx abc".split(/\s+/)以获取["mn", "zx", "abc"]/\s+/是一个正则表达式,可匹配一个或多个空格字符,因此在此上进行拆分将使我们仅剩下一组非空格字符。

然后我们可以使用indexOf检查列表中搜索词的存在。

这是一个完整的例子:

function matches(obj, searchTerm) { return obj.name.split(/\s+/).indexOf(searchTerm) >= 0; }

let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}];
let result = arr.filter(obj => matches(obj, "zx"));

答案 1 :(得分:0)

我会使用正则表达式来处理它...

// Your original array
let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}]

// Your original search term
let searchedTerm = 'zx';

// A new RegExp object which looks for your search term with a space before it (with case-insensitivity)
let searchRE = new RegExp(" " + searchedTerm, "i");

let result = arr.filter(data => {
    // Test to see if your data.name (with an additional space before it) matches
    return searchRE.test(" " + data.name);
});
console.log(result);

答案 2 :(得分:0)

您可以在array#filter中使用带有单词边界的正则表达式来获取全部namezx

let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}],
    searchedTerm = 'zx',
    result = arr.filter(({name}) => new RegExp( `\\b${searchedTerm}\\b`, "i").test(name));
console.log(result);

答案 3 :(得分:0)

您可以使用RegExp.test()对单词边界为(\b) 的数组进行过滤:

let arr = [{'name': 'mn zx abc'}, {'name': 'zx mn'}, {'name': 'mnzx'}, {'name': 'zxmn'}, {'name': 'abczx mn'}];

const output = arr.filter(obj => /\bzx\b/.test(obj.name));

console.log(output);