2016-09-15 6 views
0
var students = ["Malcom", "Jayne"]; 
var persons = [ 
    {firstname : "Malcom", lastname: "Reynolds"}, 
    {firstname : "Kaylee", lastname: "Frye"}, 
    {firstname : "Jayne", lastname: "Cobb"} 
]; 

私は学生配列のフィルタ配列を作成したいと思います。 生徒配列は動的なので、長さを変更できます。配列条件で配列をフィルタリングする方法

アイデア?

+0

あなたはそれはあなたが達成しようとしているということであるかについて、より具体的なことはできますか?あなたは学生であるそれぞれの人を返すしたいですか?そしてあなたは別の新しい配列になることを望みますか? – anstaendig

答えて

1

を使用することができます。

var students = ["Malcom", "Jayne"]; 
 

 
var persons = [ 
 
    {firstname : "Malcom", lastname: "Reynolds"}, 
 
    {firstname : "Kaylee", lastname: "Frye"}, 
 
    {firstname : "Jayne", lastname: "Cobb"} 
 
]; 
 

 
console.log(persons.filter(person => students.some(student => student == person.firstname))) 
 

 
// An advice, maybe you want to put everything to lower case 
 
// to prevent a wrong result because of case mismatch 
 
// (e.g. "Malcom" !== "malcom"). 
 
// It would be: 
 

 
persons.filter(person => students.some(student => student.toLowerCase() === person.firstname.toLowerCase()))

0

SetArray#filterを使用できます。

var students = ["Malcom", "Jayne"], 
 
    persons = [{ firstname: "Malcom", lastname: "Reynolds" }, { firstname: "Kaylee", lastname: "Frye" }, { firstname: "Jayne", lastname: "Cobb" }], 
 
    result = persons.filter(function (a) { 
 
     return this.has(a.firstname); 
 
    }, new Set(students)); 
 

 
console.log(result);

ES6

var students = ["Malcom", "Jayne"], 
 
    persons = [{ firstname: "Malcom", lastname: "Reynolds" }, { firstname: "Kaylee", lastname: "Frye" }, { firstname: "Jayne", lastname: "Cobb" }], 
 
    result = persons.filter((set => a => set.has(a.firstname))(new Set(students))); 
 

 
console.log(result);

0

そのfirstnamestudents配列である場合は、チェックすることで、配列をフィルタリングすることができるはずです。

このために
persons.filter(function(person) { return students.indexOf(person.firstname) >= 0 }); 
0

あなたはそれがsomeとともにfilterで行うことができますfilter()includes()

var students = ["Malcom", "Jayne"]; 
 
var persons = [ 
 
    {firstname : "Malcom", lastname: "Reynolds"}, 
 
    {firstname : "Kaylee", lastname: "Frye"}, 
 
    {firstname : "Jayne", lastname: "Cobb"} 
 
]; 
 

 
var r = persons.filter(function(o) { 
 
    return students.includes(o.firstname); 
 
}); 
 

 
console.log(r)

+1

Internet Explorerが 'includes'をサポートしていないことに言及する価値はありますか? –

0
var students = ["Malcom", "Jayne"]; 
var persons = [ 
    {firstname : "Malcom", lastname: "Reynolds"}, 
    {firstname : "Kaylee", lastname: "Frye"}, 
    {firstname : "Jayne", lastname: "Cobb"} 
]; 
var filteredPersons = persons.filter(person => students.indexOf(person.firstname) > -1); 
関連する問題