Javascript 匹配数组中的值并从函数返回另一个数组
我的任务是创建一个基于对象的用户数组。然后创建一个函数,该函数接受一个参数并返回与第一个arr中比较的值匹配的另一个数组Javascript 匹配数组中的值并从函数返回另一个数组,javascript,Javascript,我的任务是创建一个基于对象的用户数组。然后创建一个函数,该函数接受一个参数并返回与第一个arr中比较的值匹配的另一个数组 var users = [ { firstname : "jetlag", lastname: "son" }, { firstname : "becky", lastname: "love" }, { firstname : "just", lastname: "me" } ]; function
var users = [
{
firstname : "jetlag",
lastname: "son"
},
{
firstname : "becky",
lastname: "love"
},
{
firstname : "just",
lastname: "me"
}
];
function matchName(name) {
for (var i = 0; i < users.length; i++) {
if(users[i].firstname == name) {
return users[i];
} else {
console.log('user does not exist')
}
}
}
console.log(matchName("jetlag"));
var用户=[
{
名字:“时差”,
姓:“儿子”
},
{
名字:“贝基”,
姓:“爱”
},
{
名字:“刚刚”,
姓:“我”
}
];
函数匹配名(名称){
对于(var i=0;i
我可以匹配一个特定的用户名,但是如果我只是在matchName(“j”)
中输入j
,我想返回两个对象
这方面的任何帮助都会很好。
谢谢。您可以使用
Array.prototype.filter
并返回符合条件的对象数组。大概是这样的:
var users = [...];
function matchName(name) {
return users.filter(function (user) {
return user.firstname.indexOf(name) !== -1;
});
}
function matchName(name) {
var validUsers = []; //the array of users that pass the logic
for (var i = 0; i < users.length; i++) {
if(users[i].firstname.lastIndexOf(name) === 0) { //this is "starts with" logic
validUsers.push(users[i]); //add the element if it's valid
}
}
//I moved the logic for no matching users the outside the loop
if (validUsers.length === 0)
console.log('No matching users found')
return validUsers;
}
为此使用
Array.prototype.filter()
。您的方法将仅返回第一个匹配项作为对象
function matchName(name) {
return users.filter(function (item) {
return item.firstname == name
}
}
然后使用result的
length
来测试是否存在匹配项,以便比较前缀,而不是相等项
你可以用
users[i].firstname.indexOf(name) === 0
测试user.firstname
是否以name
开头
和用于检索匹配项:
function matchName (name) {
return users.filter(function (user) {
return user.firstname.indexOf(name) === 0;
});
}
这总是返回一个数组,我认为这是一个更好的接口。您当前的代码返回第一个完整的匹配。此代码:
if(users[i].firstname == name) {
return users[i];
}
检查两个字符串是否相等,然后return语句将只返回匹配的值。函数返回任何值后也会停止
所以你需要做两个小的改变。首先,您需要跟踪符合条件的所有用户,并且应该使用不同的逻辑来检查用户是否符合条件
修改后的代码可能如下所示:
var users = [...];
function matchName(name) {
return users.filter(function (user) {
return user.firstname.indexOf(name) !== -1;
});
}
function matchName(name) {
var validUsers = []; //the array of users that pass the logic
for (var i = 0; i < users.length; i++) {
if(users[i].firstname.lastIndexOf(name) === 0) { //this is "starts with" logic
validUsers.push(users[i]); //add the element if it's valid
}
}
//I moved the logic for no matching users the outside the loop
if (validUsers.length === 0)
console.log('No matching users found')
return validUsers;
}
函数匹配名(名称){
var validUsers=[];//传递逻辑的用户数组
对于(var i=0;i
注意:根据您正在打印的文本,我通过检查validUsers
数组中的元素数,移动了打印逻辑,即在循环外找不到任何用户。只有当没有匹配的用户时,才会打印一次
这里有一个你可以用来匹配你名字的任何部分,而不仅仅是乞丐
function matchName(name) {
var pattern = new RegEx(name, "i");
for (var i = 0; i < users.length; i++) {
if(users[i].firstname.search(pattern)) {
return users[i];
} else {
console.log('user does not exist')
}
}
}
函数匹配名(名称){
var模式=新的正则表达式(名称“i”);
对于(var i=0;i
正则表达式?看起来很棒,我只是想打破它代码>显示用户不存在错误后,它不会打印该语句三次。谢谢@Shivam根据控制台日志的文本进行更新。