如何使用JavaScript过滤JSON

如何使用JavaScript过滤JSON,javascript,json,object,Javascript,Json,Object,我需要根据它的值过滤一个巨大的JSON文件 这是我的JSON代码(这是我的JSON对象的一部分,在实际行为中,它有1000多个) 为了过滤上面的JSON对象,我使用了以下过滤函数 function usersBasedOnIDs(CustomerIds) { if (CustomerIds == "") { console.log(jsonObject); } else if (CustomerIds == "9999xx") { let res

我需要根据它的值过滤一个巨大的JSON文件

这是我的JSON代码(这是我的JSON对象的一部分,在实际行为中,它有1000多个)

为了过滤上面的JSON对象,我使用了以下过滤函数

function usersBasedOnIDs(CustomerIds) {
    if (CustomerIds == "") {
        console.log(jsonObject);
    } else if (CustomerIds == "9999xx") {

        let result = jsonObject.filter(c => c.CustomerId == "");
        console.log(result);
    } else {
        let result = jsonObject.filter(c => c.CustomerId != "" && CustomerIds.includes(c.CustomerId));
        console.log(result);
    }   
}
我如何调用函数

usersBasedOnIDs("");
usersBasedOnIDs("10261,10165");
usersBasedOnIDs("9999xx"); 
我的代码有几个问题

  • 此功能不适用于早期版本的IE 11

  • 另一件事是当我调用函数作为
    usersBasedOnIDs(“1026110165”)
    usersBasedOnIDs(“10261”),其返回值跟随JSON输出

    {UserId:10405,全名:“测试值”,CustomerId:“10261”}
    {UserId:10416,全名:“shoze ahh”,CustomerId:“1”}
    {用户ID:10244,全名:“卡哈尔人”,客户ID:“10”}

  • 但我的期望是,只有这个

    {UserId: 10405, FullName: "test value", CustomerId: "10261"}
    
    如何更改函数以避免这两个问题

    字符串
    “1026110165”
    包括
    10261
    以及字符串
    1
    10
    。这就是为什么要过滤这些ID

    相反,您可以先在
    处输入字符串以获取客户ID数组,然后使用

    const数组=[{“UserId”:10259,“CustomerId”:“你好世界”,“CustomerId”:“10165”},{“UserId”:10405,“FullName”:“test value”,“CustomerId”:“10261”},{“UserId”:10400,“FullName”:“mark ant”,“CustomerId”:“10161”},{“UserId”:16224,“FullName”:“jhon cena”,“CustomerId”:“},{“UserId”:10416,“FullName”:“shoze ah”,“CustomerId”:“1”{“UserId”:10244,“FullName”:“卡哈尔人”,“客户ID”:“10”}]
    函数usersBasedOnIDs(CustomerIds){
    如果(CustomerID==“”)
    返回数组;
    如果(CustomerID==“999xx”)
    返回array.filter(c=>c.CustomerId==“”)
    常量ID=customerID.split(“,”);
    返回array.filter(c=>c.CustomerId!=''&&id.includes(c.CustomerId));
    }
    日志(usersBasedOnIDs(“1026110165”))
    log(usersBasedOnIDs(“10261”))
    1)IE 11不支持箭头功能

    尝试将函数更改为

    var result = jsonObject.filter(function(c) { return c.CustomerId === ""; });
    

    您的代码不能在IE 11上运行的原因是它使用include函数检查数组是否包含值。IE 14及以上版本支持。IE 11及以下版本也不支持

    由于几个错误,您的代码无法工作。首先,arrow函数回调需要一个return语句。因此,不要:

    c => c.CustomerId == ""
    
    使用:

    c=>return(c.CustomerId==“”)

    此外,客户ID应作为数组而不是字符串传递。因此,不要使用:

    usersBasedOnIDs("10261,10165");
    
    您需要使用:

    usersBasedOnIDs([10261,10165]);
    

    这是IE 11的完整答案,基于@adiga answer。将箭头函数更改为正常函数,并使用而不是
    includes

    const数组=[
    {UserId:10259,全名:“hello world”,CustomerId:“10165”},
    {UserId:10405,全名:“测试值”,CustomerId:“10261”},
    {UserId:10400,全名:“markant”,CustomerId:“10161”},
    {UserId:16224,全名:“jhon cena”,CustomerId:“},
    {UserId:10416,全名:“shoze ahh”,CustomerId:“1”},
    {用户ID:10244,全名:“卡哈尔人”,客户ID:“10”}
    ];
    函数usersBasedOnIDs(CustomerIds){
    if(CustomerIds==“”)返回数组;
    如果(CustomerID==“999xx”){
    返回数组.filter(函数(c){
    返回c.CustomerId==“”;
    });
    }
    常量ID=customerID.split(“,”);
    返回数组.filter(函数(c){
    返回c.CustomerId!=''&&id.indexOf(c.CustomerId)>-1;
    });
    }
    
    日志(usersBasedOnIDs(“1026110165”))
    谢谢,但请阅读我的问题,还有另一个问题。
    包括
    和lambda表达式不工作的IE 11及其早期版本versions@Sachith您可以将箭头函数更改为普通函数,并使用indexOf而不是includes来解决问题。是的,我尝试了
    indexOf
    ,但有时它不起作用这可能是我的错,你能给我一个最终的答案吗out@Sachith在使用
    includes
    之前,您复制链接中提到的代码并将其包含在一个javascript文件中。基本上,您添加的是
    Array.prototype.includes
    ,以便您的数组可以访问it@Sachith此外,维克努布还添加了一个答案using indexOf不喜欢添加多边形填充这是一个更好的选择,考虑到它在没有多边形填充的情况下工作。@adiga感谢您的回答和谦逊的品质。问题解决。谢谢你们俩:)@Sachith如果您的问题得到解决,请
    usersBasedOnIDs([10261,10165]);