Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用对象';钥匙_Javascript_Arrays - Fatal编程技术网

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>将抛出。我认为他不想硬编码要搜索的特定属性,他想搜索所有属性。