[英]How to filter array with array condition
var students = ["Malcom", "Jayne"];
var persons = [
{firstname : "Malcom", lastname: "Reynolds"},
{firstname : "Kaylee", lastname: "Frye"},
{firstname : "Jayne", lastname: "Cobb"}
];
我想用學生數組過濾(或映射,forEach隨便什么)人員數組。 學生數組是動態的,因此可以更改其長度。
有任何想法嗎?
可以使用filter
和some
來完成。
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 // (eg "Malcom" !== "malcom"). // It would be: persons.filter(person => students.some(student => student.toLowerCase() === person.firstname.toLowerCase()))
您可以使用Set
和Array#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);
您應該能夠通過檢查他們的firstname
是否在students
數組中來過濾該數組:
persons.filter(function(person) { return students.indexOf(person.firstname) >= 0 });
為此,您可以使用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)
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.