我被赋予创建基于对象的用户数组的任务。然后创建一个函数,该函数接受一个参数并返回与第一个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"));
我能够匹配specfic用户名,但如果我只是进入j
到了matchName("j")
,我想返回两个对象。
任何帮助都会很棒。http://jsfiddle.net/dv9aq0m7/
谢谢。
您当前的代码返回第一个完全匹配项。这段代码:
if(users[i].firstname == name) {
return users[i];
}
检查两个字符串是否相等,然后return语句将仅返回该匹配值。该函数返回任何值后也将停止。
因此,您需要进行两个小更改。首先,您需要跟踪所有符合条件的用户,并且应该使用不同的逻辑来检查该字符串是否以另一个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
数组中元素的数量,将打印逻辑移到了循环外找不到任何用户的位置。仅当没有匹配的用户时才打印一次。
这是一把拨弄你的小提琴
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句