gpt4 book ai didi

javascript - 如何有条件地过滤数据

转载 作者:行者123 更新时间:2023-12-02 18:17:34 24 4
gpt4 key购买 nike

我正在编写一个小的js代码,我需要根据传递的 key 过滤数据。这里,主要问题是数据不一致(请引用我的代码示例)。

var users = [{
name: 'paul',
job: 'engineer'
},
{
name: 'John',
job: 'Mechanic'
},
{
name: 'paul',
job: 'Mechanic'
},
{
name: 'George',
job: 'Plumber'
},
{
name: 'John'
},
];

filtersToApply = {
job: 'engineer'
};




returnFilteredList = (users, columnDataToFilter) => {
return users.filter((row) => {
return Object.keys(columnDataToFilter).every(
(propertyName) =>
row[propertyName]
.toString()
.toLowerCase()
.indexOf(columnDataToFilter[propertyName].toString().toLowerCase()) >
-1
);
});
};

console.log(JSON.stringify(returnFilteredList(users, filtersToApply)));

这里我收到错误,“因为数组中最后一个 JSON 对象没有 job”。我该如何处理这个问题?

最佳答案

您可以获取您的过滤条件条目并使用Array#every进行检查或Array#some ,根据需要。

const
users = [{ name: 'paul', job: 'engineer' }, { name: 'John', job: 'Mechanic' }, { name: 'paul', job: 'Mechanic' }, { name: 'George', job: 'Plumber' }, { name: 'John' }],
filtersToApply = { job: 'engineer' },
filters = Object.entries(filtersToApply),
result = users.filter(user =>
filters.every(([k, v]) => (user[k] || '').toLowerCase() === v)
);

console.log(result);

如果你有一个数组或只有一个字符串,则需要提前比较每个值并调整大小写。

const
users = [{ name: 'paul', job: 'engineer' }, { name: 'John', job: ['Mechanic', 'Engineer'] }, { name: 'paul', job: 'Mechanic' }, { name: 'George', job: 'Plumber' }, { name: 'John' }],
filtersToApply = { job: 'engineer' },
filters = Object.entries(filtersToApply),
result = users.filter(user =>
filters.every(([k, v]) => []
.concat(user[k] || [])
.map(s => s.toLowerCase())
.includes(v)
)
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何有条件地过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71381121/

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