我的任务是创建基于对象的用户数组。然后创建一个函数,它接受一个参数并返回与第一个 arr 中比较的值匹配的另一个数组
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"));
我能够匹配特定的用户名,但是如果我只是在 matchName("j")
中输入 j
,我想返回两个对象。
对此的任何帮助都会很棒。 http://jsfiddle.net/dv9aq0m7/
谢谢。
最佳答案
您当前的代码返回第一个完整的匹配项。这段代码:
if(users[i].firstname == name) {
return users[i];
}
检查两个字符串是否相等,然后return语句将只返回匹配的值。一旦返回任何值,该函数也会停止。
因此您需要进行两个小更改。首先,您需要跟踪符合条件的所有用户,并且您应该使用不同的逻辑来检查string starts with another string .
修改后的代码可能如下所示:
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;
}
注意:根据您要打印的文本,我通过检查 validUsers
数组中的元素数量,移动了在循环之外未找到用户的打印逻辑。仅当没有匹配的用户时才会打印一次。
关于javascript - 匹配数组中的值并从函数返回另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975926/