2017-03-30 238 views
0

在我的應用程序中,我試圖返回在所有項目中工作的員工的JavaScript對象。我的數據陣列如下:從數組對象中檢索數據

var data = [ 
{ 
    projectName: "project1", projectId: 1, 
    employees: [ 
     {fullName: "John Doe", employeeId: 1}, 
     {fullName: "Jane Smith", employeeId: 2} 
    ] 
}, 

{ 
    projectName: "project2", projectId: 2, 
    employees: [ 
     {fullName: "John Doe", employeeId: 1}, 
     {fullName: "Mary Jones", employeeId: 3}, 
     {fullName: "Bill Evans", employeeId: 4} 
    ] 
} 

];

我需要搜索employeeid 1並返回兩個項目。我如何搜索它。

回答

0

嘗試使用Array.filterArray.findIndex

UPD: 因爲Array.findIndex是ES6一個新的功能,也許不被一些瀏覽器的支持,但它對於那些不支持的瀏覽器使用填充工具,請參閱文檔here)。

function doFilter(arr) { 
    return arr.filter(function(item) { 
    return item.employees.findIndex(function(employee) { 
     return employee.employeeId === 1; 
    }) > -1; 
}); 
} 

這個代碼片段將返回目標項目數組,它包含與1

var data = [{ 
 
    projectName: "project1", 
 
    projectId: 1, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Jane Smith", 
 
     employeeId: 2 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    projectName: "project2", 
 
    projectId: 2, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Mary Jones", 
 
     employeeId: 3 
 
     }, 
 
     { 
 
     fullName: "Bill Evans", 
 
     employeeId: 4 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    projectName: "project3", 
 
    projectId: 3, 
 
    employees: [{ 
 
     fullName: "Jane Smith", 
 
     employeeId: 2 
 
    }] 
 
    } 
 
]; 
 

 
function doFilter(arr) { 
 
    return arr.filter(function(item) { 
 
    return item.employees.findIndex(function(employee) { 
 
     return employee.employeeId === 1; 
 
    }) > -1; 
 
    }); 
 
} 
 
console.log(doFilter(data));

0

我希望這是你要找的代碼:

for(i=0;i<data.length;i++) 
{ 
    emp=data[i].employees; 
    for(j=0;j<emp.length;j++) 
    { 
     if(emp[j].employeeId==1) 
      console.log('Project of' + emp[j].fullName + 'is = ' + data[i].projectName) 
    } 
} 
+0

我們可以使用映射函數嗎?減少代碼? –

+0

哦,是的。我完全忘了。數組有一個內置的'filter'函數。 –

0

希望的ID的員工也能正常工作

var data = [{ 
 
    projectName: "project1", 
 
    projectId: 1, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Jane Smith", 
 
     employeeId: 5 
 
     } 
 
    ] 
 
    }, 
 

 
    { 
 
    projectName: "project2", 
 
    projectId: 2, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Mary Jones", 
 
     employeeId: 3 
 
     }, 
 
     { 
 
     fullName: "Bill Evans", 
 
     employeeId: 4 
 
     } 
 
    ] 
 
    } 
 
]; 
 

 
function getEmployeeById(id) { 
 
    var e = $.map(data, function(a) { 
 
    var r = $.grep(a.employees, function(b) { 
 
     return b.employeeId == id; 
 
    }); 
 
    if (r.length) { 
 
     console.log(a.projectName, r[0].fullName) 
 
    } 
 
    }); 
 
} 
 
getEmployeeById(1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

它可以這樣簡單。只是迭代和比較。 https://jsfiddle.net/

for(i=0;i<data.length;i++) 
{ 
    for(j=0;j<data[i].employees.length;j++) 
    { 
    if (data[i].employees[j].employeeId == 1) 
     console.log(data[i].projectId); 
    } 
}