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
属性的元素
数组中的第三个元素包含非数组的路由
属性数组中的第三个元素包含非数组的路由
属性