[英]Match value from array and return another array from a function
我被賦予創建基於對象的用戶數組的任務。 然后創建一個函數,該函數接受一個參數並返回與第一個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
該matchName("j")
我想返回兩個對象。
任何幫助都會很棒。 http://jsfiddle.net/dv9aq0m7/
謝謝。
您可以使用Array.prototype.filter
並返回與您的條件匹配的對象數組。 像這樣:
var users = [...];
function matchName(name) {
return users.filter(function (user) {
return user.firstname.indexOf(name) !== -1;
});
}
您當前的代碼將返回第一個完全匹配項。 這段代碼:
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
數組中的元素數,將打印邏輯移到了循環外找不到任何用戶的validUsers
。 僅當沒有匹配的用戶時,才打印一次。
這是一把撥弄你的小提琴
因此,您想比較前綴而不是相等性。
您可以使用
users[i].firstname.indexOf(name) === 0
測試如果user.firstname
打頭name
。
並使用過濾來檢索匹配項:
function matchName (name) {
return users.filter(function (user) {
return user.firstname.indexOf(name) === 0;
});
}
這總是返回一個數組,我認為這是一個更好的接口。
為此使用Array.prototype.filter()
。 您的方法只會將第一個匹配項作為對象返回。
function matchName(name) {
return users.filter(function (item) {
return item.firstname == name
}
}
然后使用結果的length
來測試是否存在匹配項
您可以使用正則表達式來匹配名稱的任何部分,而不僅僅是開頭。
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')
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.