Javascript 如何使用对象';钥匙
我想写一个接受两个参数(一个对象数组和一个搜索字符串)的函数。函数应返回一个数组,该数组已通过其各自的键对每个对象数组进行过滤 我的示例数组和搜索字符串如下所示Javascript 如何使用对象';钥匙,javascript,arrays,Javascript,Arrays,我想写一个接受两个参数(一个对象数组和一个搜索字符串)的函数。函数应返回一个数组,该数组已通过其各自的键对每个对象数组进行过滤 我的示例数组和搜索字符串如下所示 const myArray = [{ createdAt: 1579147513645, updatedAt: 1579147513645, id: 3, course: "Test", techStack: "Test ", … } { createdAt: 1581047008746, updated
const myArray = [{
createdAt: 1579147513645,
updatedAt: 1579147513645,
id: 3,
course: "Test",
techStack: "Test ",
…
} {
createdAt: 1581047008746,
updatedAt: 1581047008746,
id: 4,
course: "COmputer Science and mathemetics",
techStack: "Javascript and python, css and html",
…
} {
createdAt: 1582538141524,
updatedAt: 1582538141524,
id: 5,
course: "trrrt",
techStack: "dddf",
…
}]
const searchString = "sc"
我想要一个函数,如果任何对象键,无论是it、course、techStack还是其他键,都包含字母“sc”,那么该对象将在数组中返回
只是为了支持我的观点。我将展示一个函数,它执行类似的操作,但只处理“course”对象键
constfilterresult=(数组,查询)=>{
const filterCriteria=el=>el.course.toLowerCase().indexOf(query.toLowerCase())!=-1;
返回数组.过滤器(filterCriteria)
};代码>您可以尝试以下方法:
function toSearchableString(str) {
return str ? str.trim().toLowerCase() : '';
}
const filterByTerm = (item, searchString) => toSearchableString(item).includes(toSearchableString(searchString));
const filterData = (dataArray, searchString) => {
const result = dataArray.filter(data => {
const course = data.course ? filterByTerm(data.course, searchString) : false;
const techStack = data.techStack ? filterByTerm(data.techStack, searchString) : false;
// ... include here all object keys you want to be filtered based on searchString
return course || techStack;
});
return result;
};
使用Object.values()
获取对象中所有值的数组,然后使用array.prototype.some()
检查是否有任何值包含搜索字符串
constfilterresult=(数组,查询)=>{
query=query.toLowerCase();
常量filterCriteria=el=>Object.values(el).some(prop=>
typeof prop==“string”&&
prop.toLowerCase().includes(query));
返回数组.过滤器(filterCriteria)
};
常量myArray=[{
创建日期:1579147513645,
更新日期:1579147513645,
id:3,
课程:“测试”,
techStack:“测试”,
}, {
创建日期:1581047008746,
更新日期:1581047008746,
id:4,
课程:“计算机科学与数学”,
techStack:“Javascript和python、css和html”,
}, {
创建日期:158253814124,
更新日期:158253814124,
id:5,
课程:“trrrt”,
techStack:“dddf”,
}]
const searchString=“sc”
log(filterResult(myArray,searchString))
query.toLowerCase()如果query
未定义,code>将抛出。我认为他不想硬编码要搜索的特定属性,他想搜索所有属性。