javascript - 如何在一次搜索中获取匹配的员工详细信息而不循环

标签 javascript html

我为员工个人和公司详细信息创建了两个 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/

相关文章:

javascript - 页面中的几个粘性标题

jquery - 在汉堡菜单中隐藏列表项

javascript - 在自定义下拉菜单中添加图像?

javascript - 如何为除使用 javascript/jquery/css 悬停的链接之外的所有链接创建悬停效果?

javascript - 如果文本框为空,则出现 angularjs Nan

Javascript/xHTML需要抓取xml :lang

javascript - 鼠标悬停仅适用于最后一项

html - index.html 中的多个脚本链接

html - CSS BODY 在移动设备上出乎意料地比预期更宽

javascript - 在 sinon 中 stub 嵌套函数调用