Javascript 以下filterBy函数返回空数组,而不考虑筛选键
我正在创建一个Javascript 以下filterBy函数返回空数组,而不考虑筛选键,javascript,filter,Javascript,Filter,我正在创建一个filterBy函数,该函数通过filterKey进行过滤: filterBy (data, filterKey) { data = data.filter(function (row) { return Object.keys(row).some(function (key) { return String(row[key]).toLowerCase().indexOf(filterKey) > -1 }) }) console.lo
filterBy
函数,该函数通过filterKey
进行过滤:
filterBy (data, filterKey) {
data = data.filter(function (row) {
return Object.keys(row).some(function (key) {
return String(row[key]).toLowerCase().indexOf(filterKey) > -1
})
})
console.log(data)
return data
}
数据
看起来像:[{name:'Alex',createdAt:'},{…}]
filter
看起来像:A
(一个字符串)
但是,console
记录一个空数组,而不管filter
的值是什么:[]
我的过滤功能有什么问题
编辑:我想我找到了问题。如何修改函数,使其按
name
进行搜索?看起来像某些函数正在使用到小写
,但您作为示例使用的过滤器是A
(大写A)。如果您将过滤器更改为a
,您将得到一个结果
基本上,您提供了一个大写过滤器,但只搜索小写字母
var filterBy=函数(数据,filterKey){
var data=data.filter(函数(行){
返回Object.keys(行).some(函数(键){
返回字符串(行[key]).toLowerCase().indexOf(filterKey)>-1
})
})
console.log(数据)
返回数据
}
风险值数据=[{
姓名:“Alex”,
创建数据:“”
}, {
姓名:“Brett”,
创建数据:“”
}];
过滤器(数据“a”)代码>要仅按名称搜索,可以执行此操作
var filterBy =function(data, filterKey) {
data = data.filter(function (row) {
return row["name"].toLowerCase().indexOf(filterKey) > -1;
})
console.log(data)
return data
};
var data = [ { name: 'Alex', createdAt: '' }, { name: 'TT', createdAt: '' }, ];
console.log(filterBy(data,"a"));
要指定要查找的密钥,请执行以下操作:
filterBy (data, key, filterKey) {
filterKey = filterKey.toLowerCase(); // first make filterKey lowercased
return data.filter(function (row) { // filter out all objects (rows) that ...
return String(row[key]).toLowerCase().indexOf(filterKey); // ... have their value of the key 'key' (lowercased) contains the filterKey (lowercased)
});
}
然后您可以这样使用它(例如):
您是只按名称搜索还是按任何其他键搜索?请尝试使用“a”…添加filterKey=filterKey.toLowerCase()代码>在函数的开头。(您正在将值小写,但未将筛选键
:'a'!='a'
)小写)。
var newArray = filterBy(oldArray, "name", "A");