javascript - 如何根据一个对象内的字段过滤对象数组?
问题描述
我有一个这种形式的数组:
[
{
username: '',
id: '',
moreInfo: {
infoDate: ''
}
}
]
而且我需要根据 infoDate 进行过滤,无论它是否在两个特定日期之间。
我有一个接受对象的函数,以及搜索范围并返回的字段:
return resultDate >= fromDate && resultDate <= thruDate;
但是我该如何过滤这样的数组。我试过了
userData.filter(userData => functionthatFiltersDate(userData.moreInfo, {from,thru}, 'infoDate')
函数thatFiltersDate 是一个函数,它接受一个对象作为输入和日期来检查范围:
functionthatFiltersDate = (
result,
{ fromDate, thruDate },
fieldName
) => {
let resultDate = result[fieldName];
if (!isDate(resultDate)) {
resultDate = moment(result[fieldName]).toDate();
}
if (!isDate(fromDate)) {
fromDate = moment(fromDate).toDate();
}
if (!isDate(thruDate)) {
thruDate = moment(thruDate).toDate();
}
return resultDate >= fromDate && resultDate <= thruDate;
};
如何根据内部的另一个对象属性过滤对象数组?任何帮助表示赞赏!
解决方案
以这种方式调用您的函数:
function fooBar(item ){
// ....
// return truthy condition
};
var result = arr.filter(fooBar);
-
将参数传递给过滤器函数:
const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
/**
* Array filters items based on search criteria (query)
*/
const filterItems = (query) => {
return fruits.filter((el) =>
el.toLowerCase().indexOf(query.toLowerCase()) > -1
);
}
console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']
资料来源:Mozilla Docs
-
基于嵌套值过滤数组:
var arr = [
{foo: 'item1', nested: {nestedFoo: 'returnThis'} },
{foo: 'item2', nested: {nestedFoo: 'notThis'} },
];
var result = arr.filter(item => item.nested.nestedFoo == 'returnThis');
// result variable now contains an array with one object
console.log(result) // array
console.log(result[0]) // object
console.log(result[0].foo) // 'item1'
-
让它更清楚:
var arr = [
{
username: '',
id: '',
moreInfo: {
infoDate: ''
}
},
{
username: '',
id: '',
moreInfo: {
infoDate: ''
}
},
...
];
const filterItems = (fromDate, thruDate, fieldName) => {
return arr.filter((item) =>
item.moreInfo.infoDate >= fromDate && item.moreInfo.infoDate < thruDate
);
}
推荐阅读
- r - 如何将散点添加到箱形图中
- c++ - 使用迭代器实现stl向量构造函数
- javascript - reactJS中实现加密解密OpenSSL和zlib
- node.js - Node fs rmdir TypeError '回调必须是一个函数'
- android - Android:另一个AlertDialog动作中的AlertDialog
- ios - 我想将 " 添加到由 "" 包围的字符串中
- three.js - 尝试在 react-three-fiber 和网格中渲染自定义三角形在视野内外闪烁
- reactjs - 当我将表单提交到 Firestore 时如何使我的反应组件重新呈现
- python - drf 序列化程序数据未正确显示所有字段数据
- python - 如何在 Python 中对包含数据库调用的方法进行单元测试