Javascript 筛选包含另一个数组的数组

Javascript 筛选包含另一个数组的数组,javascript,arrays,filter,Javascript,Arrays,Filter,我正在尝试筛选数组 const array = [{ city: "Fullerton", routes: ["Route 1", "Route 2"], state: "CA" }, { city: "Long Beach", routes: ["Route 3", "Route 4"], state: "CA" }, { city: "Huntington Beach", routes: "Route 1", state

我正在尝试筛选数组

const array = [{
    city: "Fullerton",
    routes: ["Route 1", "Route 2"],
    state: "CA"
}, {
    city: "Long Beach",
    routes: ["Route 3", "Route 4"],
    state: "CA"
}, {
    city: "Huntington Beach",
    routes: "Route 1",
    state: "CA"
}];
通过另一个阵列:

const routes = ["Route 1", "Route 3"];
但是,我在过滤原始数组的routes项时遇到问题,因为它的变量是数组和字符串。是否有一种方法可以使用routes数组并过滤原始数组,而不考虑变量类型


此外,我希望这样,如果您选择其中一个路由,它将过滤数组,即使数组元素包含更多路由

如果您希望至少有一条路线匹配,您可以将
部分
包括

const result = array.filter(f=> 
    Array.isArray(f.routes) ? f.routes.every(r => routes.includes(r)) : false);
const routes=[“路线1”、“路线3”];
const数组=[{城市:“富勒顿”,路线:[“路线1”,“路线2”],州:“CA”},{城市:“长滩”,路线:[“路线3”,“路线4”],州:“CA”},{城市:“亨廷顿海滩”,路线:“路线1”,州:“CA”};
常量filteredArray=array.filter(a=>
[].concat(a.routes)。一些(r=>routes.includes(r))
)

console.log(filteredArray)
如果您希望至少有一个路由匹配,您可以将
部分
包括

const result = array.filter(f=> 
    Array.isArray(f.routes) ? f.routes.every(r => routes.includes(r)) : false);
const routes=[“路线1”、“路线3”];
const数组=[{城市:“富勒顿”,路线:[“路线1”,“路线2”],州:“CA”},{城市:“长滩”,路线:[“路线3”,“路线4”],州:“CA”},{城市:“亨廷顿海滩”,路线:“路线1”,州:“CA”};
常量filteredArray=array.filter(a=>
[].concat(a.routes)。一些(r=>routes.includes(r))
)

console.log(filteredArray)
您可以将字符串转换为数组,并检查某些项是否在
路由中

var数组=[{城市:“富勒顿”,路线:[“路线1”,“路线2”],州:“CA”},{城市:“长滩”,路线:[“路线3”,“路线4”],州:“CA”},{城市:“亨廷顿海滩”,路线:“路线1”,州:“CA”},
路线=[“路线1”,“路线3”],
result=array.filter(o=>[].concat(o.routes).some(s=>routes.includes));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以将字符串转换为数组,并检查某些项是否在
路由中

var数组=[{城市:“富勒顿”,路线:[“路线1”,“路线2”],州:“CA”},{城市:“长滩”,路线:[“路线3”,“路线4”],州:“CA”},{城市:“亨廷顿海滩”,路线:“路线1”,州:“CA”},
路线=[“路线1”,“路线3”],
result=array.filter(o=>[].concat(o.routes).some(s=>routes.includes));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
如果
路由中的每个
元素都对应于
路由中的某个元素,则可以
筛选
数组:

const result = array.filter(f=> 
    Array.isArray(f.routes) ? f.routes.every(r => routes.includes(r)) : false);
例如:

const数组=[{
城市:“富勒顿”,
路线:[“路线1”、“路线2”],
国家:“CA”
}, {
城市:“长滩”,
路线:[“三号干线”、“四号干线”],
国家:“CA”
}, {
城市:“亨廷顿海滩”,
路线:“路线1”,
国家:“CA”
}, {
城市:“亨廷顿海滩1号”,
路线:[“路线1”、“路线3”],
国家:“CA”
}
];
常数路由=[“路由1”、“路由3”];
const result=array.filter(f=>
Array.isArray(f.routes)?f.routes.every(r=>routes.includes(r)):false);

控制台日志(结果)
如果
路由
中的每个
元素对应于
路由
中的某个元素,则可以
筛选
数组:

const result = array.filter(f=> 
    Array.isArray(f.routes) ? f.routes.every(r => routes.includes(r)) : false);
例如:

const数组=[{
城市:“富勒顿”,
路线:[“路线1”、“路线2”],
国家:“CA”
}, {
城市:“长滩”,
路线:[“三号干线”、“四号干线”],
国家:“CA”
}, {
城市:“亨廷顿海滩”,
路线:“路线1”,
国家:“CA”
}, {
城市:“亨廷顿海滩1号”,
路线:[“路线1”、“路线3”],
国家:“CA”
}
];
常数路由=[“路由1”、“路由3”];
const result=array.filter(f=>
Array.isArray(f.routes)?f.routes.every(r=>routes.includes(r)):false);

控制台日志(结果)
实际上,数组中没有包含值为
[“Route 1”,“Route 3”]
routes
属性的元素实际上,数组中没有包含值为
[“Route 1”,“Route 3”]的
routes
属性的元素
数组中的第三个元素包含非数组的
路由
属性数组中的第三个元素包含非数组的
路由
属性