2017-03-30 26 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

はい。私は完全に忘れてしまった。 arrayには '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); 
    } 
} 
関連する問題