Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据多个值或参数筛选JSON对象数组javascript_Javascript_Arrays_Json_Filter_Attributes - Fatal编程技术网

根据多个值或参数筛选JSON对象数组javascript

根据多个值或参数筛选JSON对象数组javascript,javascript,arrays,json,filter,attributes,Javascript,Arrays,Json,Filter,Attributes,我希望能够根据多个值筛选此数组,如: 搜索条件:{“用户名”:“Alice”}应返回: users = [ { "username": "Alice", "firstName": "Alice-U", "lastName": "Wonderland" }, { "username": "bob", "firstName": "Bob-u", "lastName": "Builder", }, { "username":

我希望能够根据多个值筛选此数组,如:

搜索条件:
{“用户名”:“Alice”}
应返回:

users = [
  {
    "username": "Alice",
    "firstName": "Alice-U",
    "lastName": "Wonderland"
  },
  {
    "username": "bob",
    "firstName": "Bob-u",
    "lastName": "Builder",
  },
  {
    "username": "charly",
    "firstName": "Charly-u",
    "lastName": "Brown",
  }
]
类似于:
{“username”:“charly”,“firstName”:“charly-u”}
应返回:

{
    "username": "Alice",
    "firstName": "Alice-U",
    "lastName": "Wonderland"
}

使用javaScript或jQuery进行精确的字符串匹配

您可以使用
.each
检查每个条件键是否匹配:

函数过滤器by(列表、标准){
返回列表。筛选器(候选=>
Object.key(标准).every(key=>
候选人[关键]==标准[关键]
)
);
}
让用户=[
{“用户名”:“爱丽丝”,“名字”:“爱丽丝-U”,“姓氏”:“仙境”},
{“用户名”:“bob”,“名字”:“bob-u”,“姓氏”:“建筑商”},
{“username”:“charly”,“firstName”:“charly-u”,“lastName”:“Brown”}
];
log(filterBy(用户,{“用户名”:“Alice”});

log(filterBy(用户,{“username”:“charly”,“firstName”:“charly-u”})
您可以使用
.each
检查每个条件键是否匹配:

函数过滤器by(列表、标准){
返回列表。筛选器(候选=>
Object.key(标准).every(key=>
候选人[关键]==标准[关键]
)
);
}
让用户=[
{“用户名”:“爱丽丝”,“名字”:“爱丽丝-U”,“姓氏”:“仙境”},
{“用户名”:“bob”,“名字”:“bob-u”,“姓氏”:“建筑商”},
{“username”:“charly”,“firstName”:“charly-u”,“lastName”:“Brown”}
];
log(filterBy(用户,{“用户名”:“Alice”});
log(filterBy(用户,{“username”:“charly”,“firstName”:“charly-u”})为什么不?仅筛选具有
username=“Alice”
的元素。另外,在过滤对象数组时,可以在过滤器的箭头函数中添加多个对象键。例如:

{
    "username": "charly",
    "firstName": "Charly-u",
    "lastName": "Brown",
}
用户=[{
“用户名”:“爱丽丝”,
“名字”:“Alice-U”,
“姓氏”:“仙境”
},
{
“用户名”:“鲍勃”,
“名字”:“Bob-u”,
“lastName”:“Builder”,
},
{
“用户名”:“charly”,
“名字”:“Charly-u”,
“姓氏”:“布朗”,
}
];
结果=users.filter(user=>user.username=='Alice');
控制台日志(结果)为什么不?仅筛选具有
username=“Alice”
的元素。另外,在过滤对象数组时,可以在过滤器的箭头函数中添加多个对象键。例如:

{
    "username": "charly",
    "firstName": "Charly-u",
    "lastName": "Brown",
}
用户=[{
“用户名”:“爱丽丝”,
“名字”:“Alice-U”,
“姓氏”:“仙境”
},
{
“用户名”:“鲍勃”,
“名字”:“Bob-u”,
“lastName”:“Builder”,
},
{
“用户名”:“charly”,
“名字”:“Charly-u”,
“姓氏”:“布朗”,
}
];
结果=users.filter(user=>user.username=='Alice');

控制台日志(结果)它不能只是一个带有for循环的函数吗? //召唤 this.filterIt('username','Alice',users)


它不能只是一个带有for循环的函数吗? //召唤 this.filterIt('username','Alice',users)


你可以用下面的方法写。如果要执行精确搜索,请编写如下搜索函数:

//function
Function filterIt (key, value, arr){
result = [];
for ( a in arr){
   if (a[key] == value) result.push(a);
}
return result;
}
可以使用
object.keys
迭代所有对象属性,而不是比较每个键

如果您想匹配每一项,请使用以下函数

function search(term) {
  return users.filter(({username, firstName, lastName}) => {
    return username.toLowerCase() === term.toLowerCase() ||
          firstName.toLowerCase() === term.toLowerCase() ||
          lastName.toLowerCase() === term.toLowerCase()
  })
}
这甚至可以在任何地方匹配
searchTerm
。例如,如果您将其用作
search('al')
。它将返回第一个对象,而第一个函数需要像
search('alice')
这样的精确字符串才能工作

const用户=[{
“用户名”:“爱丽丝”,
“名字”:“Alice-U”,
“姓氏”:“仙境”
},
{
“用户名”:“鲍勃”,
“名字”:“Bob-u”,
“lastName”:“Builder”,
},
{
“用户名”:“charly”,
“名字”:“Charly-u”,
“姓氏”:“布朗”,
}
]
功能搜索完整(术语){
返回用户.filter(({
用户名,
名字,
姓氏
}) => {
返回username.toLowerCase()==term.toLowerCase()||
firstName.toLowerCase()==term.toLowerCase()||
lastName.toLowerCase()==term.toLowerCase()
})
}
函数搜索(术语){
返回用户.filter(({
用户名,
名字,
姓氏
}) => {
返回username.toLowerCase().indexOf(term.toLowerCase())>-1||
firstName.toLowerCase().indexOf(term.toLowerCase())>-1||
lastName.toLowerCase().indexOf(term.toLowerCase())>-1
})
}
log(searchFull('alice'))

log(search('al'))
您可以用以下方式编写它。如果要执行精确搜索,请编写如下搜索函数:

//function
Function filterIt (key, value, arr){
result = [];
for ( a in arr){
   if (a[key] == value) result.push(a);
}
return result;
}
可以使用
object.keys
迭代所有对象属性,而不是比较每个键

如果您想匹配每一项,请使用以下函数

function search(term) {
  return users.filter(({username, firstName, lastName}) => {
    return username.toLowerCase() === term.toLowerCase() ||
          firstName.toLowerCase() === term.toLowerCase() ||
          lastName.toLowerCase() === term.toLowerCase()
  })
}
这甚至可以在任何地方匹配
searchTerm
。例如,如果您将其用作
search('al')
。它将返回第一个对象,而第一个函数需要像
search('alice')
这样的精确字符串才能工作

const用户=[{
“用户名”:“爱丽丝”,
“名字”:“Alice-U”,
“姓氏”:“仙境”
},
{
“用户名”:“鲍勃”,
“名字”:“Bob-u”,
“lastName”:“Builder”,
},
{
“用户名”:“charly”,
“名字”:“Charly-u”,
“姓氏”:“布朗”,
}
]
功能搜索完整(术语){
返回用户.filter(({
用户名,
名字,
姓氏
}) => {
返回username.toLowerCase()==term.toLowerCase()||
firstName.toLowerCase()==term.toLowerCase()||
lastName.toLowerCase()==term.toLowerCase()
})
}
函数搜索(术语){
返回用户.filter(({
用户名,
名字,
姓氏
}) => {
返回username.toLowerCase().indexOf(term.toLowerCase())>-1||
firstName.toLowerCase().indexOf(term.toLowerCase())>-1||
lastName.toLowerCase().indexOf(term.toLowerCase())>-1
})
}
log(searchFull('alice'))
console.log(搜索('al'))
fo