如何使用JavaScript过滤JSON
我需要根据它的值过滤一个巨大的JSON文件 这是我的JSON代码(这是我的JSON对象的一部分,在实际行为中,它有1000多个) 为了过滤上面的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
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");
我的代码有几个问题
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]);