Javascript 如何使用JQuery基于ID搜索JSON对象

Javascript 如何使用JQuery基于ID搜索JSON对象,javascript,jquery,json,filter,Javascript,Jquery,Json,Filter,在我的web应用程序中,当初始加载AJAX调用时,会给出以下JSON字符串 [ { "UserId":10259, "FullName":"jhno doil", "SupervisorId":"10165" }, { "UserId":10405, "FullName":"Adam mark", "SupervisorId":"10261" }, { "UserId

在我的web应用程序中,当初始加载AJAX调用时,会给出以下JSON字符串

[  
   {  
      "UserId":10259,
      "FullName":"jhno doil",
      "SupervisorId":"10165"
   },
   {  
      "UserId":10405,
      "FullName":"Adam mark",
      "SupervisorId":"10261"
   },
   {  
      "UserId":10400,
      "FullName":"belly barra",
      "SupervisorId":"10161"
   },
   {  
      "UserId":16224,
      "FullName":"silvester",
      "SupervisorId":""
   },
   {  
      "UserId":10416,
      "FullName":"Arnetta Chatcho",
      "SupervisorId":"10179"
   },
   {  
      "UserId":10244,
      "FullName":"Ashanti Bueti",
      "SupervisorId":"10165"
   }
]
如何编写过滤函数或LINQ查询来根据传递的SupervisorID字符串选择匹配的记录?我可以用JQuery编写LINQ吗? 此函数应接受逗号分隔的SupervisorIds字符串,并根据该字符串过滤匹配的JSON

function usersBasedOnIDs(SupervisorIds){


}
这就是我调用函数的方式

usersBasedOnIDs("10165,10179,10161");
usersBasedOnIDs("10179,10161");
usersBasedOnIDs("10165");
如果我将空字符串传递给函数
usersBasedOnIDs(“”)
,则所有JSON对象都将返回,而不进行任何过滤

作为一个明确的例子:1如果我将函数调用为usersBasedOnIDs(“101651017910161”)

应返回此JSON

[  
   {  
      "UserId":10259,
      "FullName":"jhno doil",
      "SupervisorId":"10165"
   },
   {  
      "UserId":10400,
      "FullName":"belly barra",
      "SupervisorId":"10161"
   },
   {  
      "UserId":10416,
      "FullName":"Arnetta Chatcho",
      "SupervisorId":"10179"
   },
   {  
      "UserId":10244,
      "FullName":"Ashanti Bueti",
      "SupervisorId":"10165"
   }
]
ex:2如果我将函数调用为
usersBasedOnIDs(“10165”)


您可以使用
split
来拆分字符串,
按SupervisorId筛选
,以及
包含
来检查数组中的项

在使用之前,您可能需要使用
JSON.Parse
将字符串转换为对象

更多关于函数的信息,请访问

包括

滤器

var数据=[
{  
“用户ID”:10259,
“全名”:“jhno doil”,
“监督员”:“10165”
},
{  
“用户ID”:10405,
“全名”:“亚当·马克”,
“监管者ID”:“10261”
},
{  
“用户ID”:10400,
“全名”:“贝里·巴拉”,
“监督员”:“10161”
},
{  
“用户ID”:16224,
“全名”:“西尔维斯特”,
“监管者ID”:”
},
{  
“用户ID”:10416,
“全名”:“阿内塔·查乔”,
“监督员”:“10179”
},
{  
“用户ID”:10244,
“全名”:“Ashanti Bueti”,
“监督员”:“10165”
}
];
//"10165,10179,10161"
函数usersBasedOnIDs(SupervisorIds){
让结果=[];
如果(监管者ID==“”){
结果=数据;
}否则{
让Supervisors=SupervisorIds.split(“,”);
结果=data.filter(c=>c.SupervisorId!=''&&SupervisorIds.includes(c.SupervisorId));
}
控制台日志(结果);
返回结果;
}
//usersBasedOnIDs(“101651017910161”)
//日志(usersBasedOnIDs(“10165”))

usersBasedOnIDs(“”
这是您的函数,在以下情况下使用数组更好:

function usersBasedOnIDs(SupervisorIds){

 //SupervisorIds is an Array !
 const data = YOUR DATA;
 var newData = [];
 if(SupervisorIds && SupervisorIds.length > 1){
   SupervisorIds.forEach(e => {
     if(SupervisorIds.includes(e.id))
      newData.push(e)
   });
   //if no match found, return an empty array
   return newData;
 }else{
   //No filter
   return data;
 }
}
我建议通过数组传递多个ID,但如果您想使用旧方法,可以使用此函数

function SearchById(id, field = "SupervisorId") {
    if (id === "") return data;
    return data.filter(value => {
        if(id.split(',').length > 0) {
            const ids = id.split(',');
            return ids.indexOf(value[field]) !== -1;
        }
        return value[field] === id;
    });
}
使用jQuery:

const数据=[
{
“用户ID”:10259,
“全名”:“jhno doil”,
“监督员”:“10165”
},
{
“用户ID”:10405,
“全名”:“亚当·马克”,
“监管者ID”:“10261”
},
{
“用户ID”:10400,
“全名”:“贝里·巴拉”,
“监督员”:“10161”
},
{
“用户ID”:16224,
“全名”:“西尔维斯特”,
“监管者ID”:”
},
{
“用户ID”:10416,
“全名”:“阿内塔·查乔”,
“监督员”:“10179”
},
{
“用户ID”:10244,
“全名”:“Ashanti Bueti”,
“监督员”:“10165”
}
];
函数SearchById(id,field=“SupervisorId”){
返回jQuery.grep(数据、函数(值){
如果(id==“”)返回数据;
if(typeof(id)=“string”和&id.split(“,”).length>0){
常量id=id.split(',');
返回id.indexOf(值[字段])!=-1;
}else if(Array.isArray(id)){
返回id.indexOf(值[字段])!=-1;
}
返回值[字段]==id;
});
}
console.log(“单一”,SearchById(“10165”);
log(“多数组”,SearchById([“10165”,“10179”]);
log(“多重分割”,SearchById(“1016510179”);
console.log(“空”,SearchById(“”)

没有太多的搜索价值。我想你对你所问的技术感到困惑。JSON是JavaSscript对象表示法——一种将JS对象/数组表示为纯文本的方法。一旦你有了一个JSON字符串,你通常想要
JSON.parse(theString)
来获得一个实际的Javascript对象/数组。然后你可以用普通的Javascript代码来操作它;不需要jQuery或LINQ。@Hien Nguyen这是LINQ吗?还是纯JQuery?当我将函数调用为
usersBasedOnIDs(“10165”)时,它是纯javascript@Hien Nguyen也打印此json记录`{“UserId”:16224,“FullName”:“silvester”,“SupervisorId”:“}`I更新了筛选数据的条件。筛选(c=>c.SupervisorId!=”&&SupervisorIds.includes(c.SupervisorId))@HienNguyen当我传递空字符串
usersBasedOnIDs(“”)
我还需要检索所有记录,这意味着原始JSONI是纯JS还是JQuery?这是我测试过的,但是当我用空字符串调用Function时,它只返回
{UserId:16224,FullName:“silvester”,SupervisorId:“}
这个reocrd,正如我在问题中所说的,当我空着通过时,我需要通过所有记录string@thomsan您希望函数使用jQuery?不,先生,这很好,如果您能用jQuery给出答案,这将有助于提高我的知识。:)无论如何thanks@thomsan答案已经用jQuery函数更新了。这是纯js还是JQury?@thomsan pure js
function usersBasedOnIDs(SupervisorIds){

 //SupervisorIds is an Array !
 const data = YOUR DATA;
 var newData = [];
 if(SupervisorIds && SupervisorIds.length > 1){
   SupervisorIds.forEach(e => {
     if(SupervisorIds.includes(e.id))
      newData.push(e)
   });
   //if no match found, return an empty array
   return newData;
 }else{
   //No filter
   return data;
 }
}
const data = [
    {
        "UserId":10259,
        "FullName":"jhno doil",
        "SupervisorId":"10165"
    },
    {
        "UserId":10405,
        "FullName":"Adam mark",
        "SupervisorId":"10261"
    },
    {
        "UserId":10400,
        "FullName":"belly barra",
        "SupervisorId":"10161"
    },
    {
        "UserId":16224,
        "FullName":"silvester",
        "SupervisorId":""
    },
    {
        "UserId":10416,
        "FullName":"Arnetta Chatcho",
        "SupervisorId":"10179"
    },
    {
        "UserId":10244,
        "FullName":"Ashanti Bueti",
        "SupervisorId":"10165"
    }
];

function SearchById(id, field = "SupervisorId") {
    if (id === "") return data;
    return data.filter(value => {
        if(Array.isArray(id)) {
            return id.indexOf(value[field]) !== -1;
        }
        return value[field] === id;
    });
}

SearchById("10165");
SearchById(["10165", "10179"]);
// Search By Other Field
SearchById(10259, "UserId");
function SearchById(id, field = "SupervisorId") {
    if (id === "") return data;
    return data.filter(value => {
        if(id.split(',').length > 0) {
            const ids = id.split(',');
            return ids.indexOf(value[field]) !== -1;
        }
        return value[field] === id;
    });
}