2016-08-03 24 views
0

下面我有兩個代碼片段,它們都有相同的對象和函數。所以他們都應該返回相同的價值。 我可以看到的唯一區別是在底部代碼片段中的函數的'for循環'中添加了括號和'else'語句。JS:爲類似函數獲取不同的值

爲什麼每個代碼片段中的函數都返回不同的值而不是相同的值?感謝

var employees = [{ 
 
    firstName: 'Ollie', 
 
    lastName: 'Hepburn', 
 
    role: 'Boss' 
 
}, { 
 
    firstName: 'Morty', 
 
    lastName: 'Smith', 
 
    role: 'Truck Driver' 
 
}, { 
 
    firstName: 'Peter', 
 
    lastName: 'Ross', 
 
    role: 'Warehouse Manager' 
 
}, { 
 
    firstName: 'Cal', 
 
    lastName: 'Neil', 
 
    role: 'Sales Assistant' 
 
}, { 
 
    firstName: 'Jesse', 
 
    lastName: 'Saunders', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Anna', 
 
    lastName: 'Jones', 
 
    role: 'Sales Assistant' 
 
}, { 
 
    firstName: 'Carmel', 
 
    lastName: 'Hamm', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Tori', 
 
    lastName: 'Sparks', 
 
    role: 'Sales Manager' 
 
}, { 
 
    firstName: 'Peter', 
 
    lastName: 'Jones', 
 
    role: 'Warehouse Picker' 
 
}, { 
 
    firstName: 'Mort', 
 
    lastName: 'Smith', 
 
    role: 'Warehouse Picker' 
 
}, { 
 
    firstName: 'Anna', 
 
    lastName: 'Bell', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Jewel', 
 
    lastName: 'Bell', 
 
    role: 'Receptionist' 
 
}, { 
 
    firstName: 'Colin', 
 
    lastName: 'Brown', 
 
    role: 'Trainee' 
 
}]; 
 

 
function findEmployeesRole(name) { 
 
    for(var i = 0; i < employees.length; i++) 
 
    if(name === employees[i].firstName + " " + employees[i].lastName) return employees[i].role; 
 
    return "Does not work here!"; 
 
} 
 
             
 
             console.log(findEmployeesRole("Colin Brown"));

在下面的代碼段的對象下面的函數具有用於循環在括號。

var employees = [{ 
 
    firstName: 'Ollie', 
 
    lastName: 'Hepburn', 
 
    role: 'Boss' 
 
}, { 
 
    firstName: 'Morty', 
 
    lastName: 'Smith', 
 
    role: 'Truck Driver' 
 
}, { 
 
    firstName: 'Peter', 
 
    lastName: 'Ross', 
 
    role: 'Warehouse Manager' 
 
}, { 
 
    firstName: 'Cal', 
 
    lastName: 'Neil', 
 
    role: 'Sales Assistant' 
 
}, { 
 
    firstName: 'Jesse', 
 
    lastName: 'Saunders', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Anna', 
 
    lastName: 'Jones', 
 
    role: 'Sales Assistant' 
 
}, { 
 
    firstName: 'Carmel', 
 
    lastName: 'Hamm', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Tori', 
 
    lastName: 'Sparks', 
 
    role: 'Sales Manager' 
 
}, { 
 
    firstName: 'Peter', 
 
    lastName: 'Jones', 
 
    role: 'Warehouse Picker' 
 
}, { 
 
    firstName: 'Mort', 
 
    lastName: 'Smith', 
 
    role: 'Warehouse Picker' 
 
}, { 
 
    firstName: 'Anna', 
 
    lastName: 'Bell', 
 
    role: 'Admin' 
 
}, { 
 
    firstName: 'Jewel', 
 
    lastName: 'Bell', 
 
    role: 'Receptionist' 
 
}, { 
 
    firstName: 'Colin', 
 
    lastName: 'Brown', 
 
    role: 'Trainee' 
 
}]; 
 

 
function findEmployeesRole(name) { 
 
    for (var i = 0; i < employees.length; i++){ 
 
    if(name === employees[i].firstName + " " + employees[i].lastName){ 
 
     return employees[i].role; 
 
    } else { 
 
     return "Does not work here!"; 
 
    } 
 
    } 
 
} 
 

 
console.log(findEmployeesRole("Colin Brown"));

+0

它真的很明顯,如果你考慮循環 –

+0

這麼可愛,這實際上發生在現實生活中的人。 – mash

回答

0

在第二組的代碼,它將永遠只能是能夠檢查的第一個項目。或者,您在第一個項目上有一個匹配項,並且您返回該角色,否則返回「此處不工作」,循環無法繼續。

在第一段代碼中,return語句實際上是在循環外部,這意味着它只會返回「不工作在這裏」,直到所有項目已被檢查。與支架,它應該是這樣的:

function findEmployeesRole(name) { 
    for (var i = 0; i < employees.length; i++) { 
     if (name === employees[i].firstName + " " + employees[i].lastName) { 
      return employees[i].role; 
     } 
    } 
    return "Does not work here!"; 
} 

它通常被認爲是很好的做法,始終使用大括號,以防止這樣的情況下它不是乍一看發生的事情完全清楚。

+0

我明白了!哦,我的天哪,花了一個半小時試圖看到它。知道這是簡單的事情。你對你的解釋非常有幫助謝謝! – TheBiscuit