根据多个值或参数筛选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