JavaScript数组筛选器未按预期工作

JavaScript数组筛选器未按预期工作,javascript,arrays,Javascript,Arrays,我有这样一个数组: var arrayd=[{ 类别识别号:1, 类别:a,, }, { 类别识别号:1, 类别:b, }, { 类别识别号:1, 类别:c, }, { 类别识别号:1, 类别:d, }, { 类别识别号:3, 类别:e, }, { 类别识别号:18, 类别:f, } ]; var搜索项=1; arrayd=arrayd.filter s=>parseInts.CATEGORY\u ID.indexOfparseIntsearchTerm!==-1. ; console.log

我有这样一个数组:

var arrayd=[{ 类别识别号:1, 类别:a,, }, { 类别识别号:1, 类别:b, }, { 类别识别号:1, 类别:c, }, { 类别识别号:1, 类别:d, }, { 类别识别号:3, 类别:e, }, { 类别识别号:18, 类别:f, } ]; var搜索项=1; arrayd=arrayd.filter s=>parseInts.CATEGORY\u ID.indexOfparseIntsearchTerm!==-1. ; console.logarrayd 将类别转换为数字,并检查其是否等于搜索词:

const arrayd=[{类别ID:1,类别a},{类别ID:1,类别b},{类别ID:1,类别c},{类别ID:1,类别d},{类别ID:3,类别e},{类别ID:18,类别f}]; const searchTerm=1; const result=arrayd.filter s=>+s.CATEGORY_ID===searchTerm ; console.logresult<问题是如果你把18看成字符串,那么它包含1。如文件所述:

indexOf方法返回指定值第一次出现的调用字符串对象内的索引,从fromIndex开始搜索。如果找不到该值,则返回-1

所以indexOf返回了一个not-1值,这就是为什么您也从数组中得到了该对象

只需使用===和parseInt,如下所示:

var arrayd=[{ 类别识别号:1, 类别:a,, }, { 类别识别号:1, 类别:b, }, { 类别识别号:1, 类别:c, }, { 类别识别号:1, 类别:d, }, { 类别识别号:3, 类别:e, }, { 类别识别号:18, 类别:f, } ]; var搜索项=1; arrayd=arrayd.filter s=>parseInts.CATEGORY_ID===searchTerm ;
console.logarrayd 我不知道你为什么要这么费解地做,但你可以通过使用以下工具轻松实现你的目标:

arrayd = arrayd.filter(
  s => parseInt(s.CATEGORY_ID)===searchTerm
);
这将返回您期望的4个结果

I hope the following answer will help you. It's a callback common function to check with the searchItem.

    var arrayd = [{
        "CATEGORY_ID": "1",
        "CATEGORY": "a",
    },
    {
        "CATEGORY_ID": "1",
        "CATEGORY": "b",
    },
    {
        "CATEGORY_ID": "1",
        "CATEGORY": "c",
    },
    {
        "CATEGORY_ID": "1",
        "CATEGORY": "d",
    },
    {
        "CATEGORY_ID": "3",
        "CATEGORY": "e",
    },
    {
        "CATEGORY_ID": "18",
        "CATEGORY": "f",
    }
    ];
    var searchTerm = 1;

    arrayd = arrayd.filter(s => parseInt(s.CATEGORY_ID) == searchTerm)
    console.log(arrayd);
不要使用indexOf,只需比较值本身。如果您查找indexOf的功能,您就会知道它为什么不起作用,对于您尝试的功能来说,它也不是一个灵活的解决方案。