javascript - javascript:使用函数方法通过数组的多个值过滤对象
问题描述
我正在尝试使用值列表和键列表搜索对象列表。我的第一种方法是创建一个给定特定值的对象列表。但是,密钥是硬编码的,我应该使用更实用的方法。接下来,我认为我应该在为每个值过滤后创建一个对象列表。但是,我再次对这些值进行硬编码。我不确定如何传递值列表和键列表,如下所示。我应该使用 Map 对象吗?如果是这样,我怎样才能提取以下两个变量?:
const list_of_keys = ['color_1', 'color_2', 'color_3']
const list_of_values = ['red','blue','purple']`
const data = [
{make: 'ford',model: 'mustang',color_1: 'red',color_2: '',color_3: ''},
{make: 'ford',model: 'escape',color_1: '',color_2: 'blue',color_3: ''},
{make: 'ford',model: 'expedition',color_1: '',color_2: '',color_3: 'purple'},
{make: 'mercedez',model: 'helicopter',color_1: '',color_2: '',color_3: 'orange'}
]
// hard-coded object keys
const filter_by_multiple_keys = (carObject, Value) => carObject.filter(car =>
car.color_1 === Value ||
car.color_2 === Value ||
car.color_3 === Value
);
// hard-coded values
const filterByColorsObject = list_of_objects => {
const dataArray = [];
dataArray.push(filter_by_multiple_keys(list_of_objects, 'red'));
dataArray.push(filter_by_multiple_keys(list_of_objects, 'blue'));
dataArray.push(filter_by_multiple_keys(list_of_objects, 'purple'));
return(dataArray)
}
console.log(filterByColorsObject(data))
解决方案
创建一个键名数组是正确的想法 -.some
当在对象上访问该属性时,检查它们是否等于值:
const filter_by_multiple_Columns = (carObject, value) => carObject.filter(
car => list_of_keys.some(
key => car[key] === value
)
);
.map
要从数组构造多个列list_of_values
:
const filterByColorsObject = list_of_objects => list_of_values.map(
value => filter_by_multiple_Columns(list_of_objects, value)
);
但这是一个极其奇怪的数据结构。如果可能,请将colors
属性更改为数组,而不是多个单独的属性:
{ make: 'mercedez',model: 'helicopter', colors: ['', '', 'orange'] }
或者
{ make: 'mercedez',model: 'helicopter',colors: ['orange'] }
这将使它们更容易迭代。对于上述情况,您将执行以下操作:
const filter_by_multiple_Columns = (carObject, Value) => carObject.filter(
car => car.colors.includes(Value)
);
推荐阅读
- python - 在使用 Flask for Python 3 时如何使用 Bootstrap 4?
- python - sqlite3.OperationalError:靠近“'...'”:语法错误
- azure-devops - 在 IterationPath 上使用 @Current 构建失败后创建一个 workItem
- php - 如何始终在使用 php 的链接上添加 http 协议?
- java - 使用 javax.validation 验证日期不能小于 1900-01-01
- python - 使用 wikipedia-api 时出现 JSONDecodeError
- c# - 为什么我打开双缓冲后屏幕还在闪烁?
- java - Spring Boot 使用 SSL 连接到 Postgresql
- ms-access - 以组合框值为条件的 MS Access 弹出表单
- ibm-midrange - AS400 WRKACTJOB 中的 DSPW 是什么意思?