gpt4 book ai didi

javascript:使用函数方法通过数组的多个值过滤对象

转载 作者:行者123 更新时间:2023-12-01 00:04:35 24 4
gpt4 key购买 nike

我正在尝试使用值列表和键列表来搜索对象列表。我的第一个方法是创建一个给定特定值的对象列表。然而,关键是硬编码的,我应该使用更实用的方法。接下来,我想我应该在过滤每个值后创建一个对象列表。但是,我再次对这些值进行硬编码。我不确定如何传递值列表和键列表,如下所示。我应该使用 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
)
);

要从 list_of_values 数组构造多个列,.map:

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)
);

关于javascript:使用函数方法通过数组的多个值过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com