我为员工个人和公司详细信息创建了两个 json 数组。 根据输入字段中给出的值,我匹配两个表并在单个表中显示相应员工的个人和公司详细信息。
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>
<script>
var employee=
{
"EmployeesPersonalDetails" :
[
{
"employeeID":01,
"region":"Coimbatore",
"phoneNumber":9087653456,
"emailAddress":"abc@gmail.com"
},
{
"employeeID":02,
"region":"Avinashi",
"phoneNumber":8990908765,
"emailAddress":"def@gmail.com"
},
{
"employeeID":03,
"region":"Thippur",
"phoneNumber":9089898990,
"emailAddress":"ghi@gmail.com"
},
{
"employeeID":04,
"region":"Madurai",
"phoneNumber":9012345990,
"emailAddress":"jkl@gmail.com"
},
{
"employeeID":05,
"region":"Thippur",
"phoneNumber":9067890990,
"emailAddress":"mno@gmail.com"
},
{
"employeeID":06,
"region":"Thippur",
"phoneNumber":9345218990,
"emailAddress":"pqr@gmail.com"
}
]
}
var empcmpy={
"EmployeesCompanyDetails" :[
{
"name" : "Mike",
"employeeID" : 01,
"designation" : "Software engineer"
},
{
"name" : "Westlee",
"employeeID" : 02,
"designation" : "Software engineer trainee"
},
{
"name" : "Denise",
"employeeID" : 03,
"designation" : "Software test engineer"
},
{ "name" : "Matthew",
"employeeID" : 04,
"designation" : "Software Test engineer trainee"
},
{
"name" : "Mark",
"employeeID" : 05,
"designation" : "Project Manager"
},
{
"name" : "Karla",
"employeeID" : 06,
"designation" : "Associate Project Manager "
}
]
}
function employeeDetails(){
var eID = document.getElementById('eid').value;
var flag = false;
if(eID != "" ){
for(i=0;i<employee.EmployeesPersonalDetails.length;i++){
for(j=0;j<empcmpy.EmployeesCompanyDetails.length;j++){
if(employee.EmployeesPersonalDetails[i].employeeID == eID && empcmpy.EmployeesCompanyDetails[j].employeeID == eID ){
flag=true;
document.getElementById('pro2').style.display = "block";
var tblRow = "<tr>" + "<td>" + empcmpy.EmployeesCompanyDetails[j].name + "</td>"
+"<td>" + empcmpy.EmployeesCompanyDetails[j].employeeID + "</td>"
+ "<td>" + employee.EmployeesPersonalDetails[i].phoneNumber + "</td>"
+"<td>" + employee.EmployeesPersonalDetails[i].emailAddress + "</td>"
+"<td>" + empcmpy.EmployeesCompanyDetails[j].designation + "</td>"
+"<td>" + employee.EmployeesPersonalDetails[i].region + "</td>"
+ "</tr>";
$(tblRow).appendTo("#employee1 tbody");
}
}
}
if(flag==false)
alert ("Not matched");
}
else
{
alert ("Emp id is empty");
}
}
</script>
</head>
<body>
<div class="wrapper">
<div>
Enter Emp id : <input type ="text" id="eid" name="eid"/>
<button id="getEmpdetails" onclick="employeeDetails()"> GetEmployeeDetails</button>
</div>
<div id ="pro2" class="profile2" style="display:none;">
</br> <table id= "employee1" border="2">
<thead>
<th>Name</th>
<th>ID</th>
<th> Phone Number</th>
<th>Email Address</th>
<th>Designation</th>
<th>City</th>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</body>
</html>
我使用了两个循环来执行这些操作,为了找到第 n 个员工,它必须循环 n 次。我该如何优化它。
更新:
function employeeDetails(){
var eID = document.getElementById('eid').value;
var flag = 1;
if(eID != "" ){
for(i=0;i<employee.EmployeesPersonalDetails.length;i++){
if(employee.EmployeesPersonalDetails[i].employeeID == eID ){
flag++;
document.getElementById('pro2').style.display = "block";
var tblRow = "<tr>"
+ "<td>" + employee.EmployeesPersonalDetails[i].phoneNumber + "</td>"
+"<td>" + employee.EmployeesPersonalDetails[i].emailAddress + "</td>"
+"<td>" + employee.EmployeesPersonalDetails[i].region + "</td>";
$(tblRow).appendTo("#employee1 tbody");
}
}
for(j=0;j<empcmpy.EmployeesCompanyDetails.length;j++){
if( empcmpy.EmployeesCompanyDetails[j].employeeID == eID ){
flag++;
document.getElementById('pro2').style.display = "block";
var tblRow = "<td>" + empcmpy.EmployeesCompanyDetails[j].name + "</td>"
+"<td>" + empcmpy.EmployeesCompanyDetails[j].employeeID + "</td>"
+"<td>" + empcmpy.EmployeesCompanyDetails[j].designation + "</td>";
$(tblRow).appendTo("#employee1 tbody");
}
}
if(flag!=3)
alert ("Not matched");
}
else
{
alert ("Emp id is empty");
}
}
最佳答案
单循环函数示例。只需将其插入您的代码中即可。
请告诉我它是否适合您..
function magicMatch(eID, persons, employees) {
var personsCount = persons.length;
var employeesCount = employees.length;
var maxCount = personsCount > employeesCount ? personsCount : employeesCount;
var person, employee;
for (var i = 0; i < maxCount; i++) {
if (!person && i < personsCount) {
if (persons[i].employeeID == eID) {
person = persons[i];
}
}
if (!employee && i < employeesCount) {
if (employees[i].employeeID == eID) {
employee = employees[i];
}
}
if (person && employee) {
return [person, employee]; // or whatever return format you want
}
}
return [person, employee]; // or whatever return format you want
}
// usage example
var personEmployeeMatched = magicMatch(
document.getElementById('eid').value,
employee.EmployeesPersonalDetails,
empcmpy.EmployeesCompanyDetails
);
// personEmployeeMatched will now contain:
// [{..person..} | undefined, {..employee..} | undefined]
关于javascript - 如何在一次搜索中获取匹配的员工详细信息而不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778756/