首页 > 解决方案 > TypeError: obj[key].includes 不是函数:在过滤器函数中

问题描述

我想找到具有某些价值的任何属性的对象。但我有错误:TypeError: obj[key].includes is not a function。如何解决?

var aa = [{id: 1,type: 1,status: 1,name: 'txt'},{id: 2,type: 1,status: 1,name: 'txt'},{id: 3,type: 0,status: 0,name: 'txt'}];

function filterIt(arr, searchKey) {
  return arr.filter(function(obj) {
    return Object.keys(obj).some(function(key) {
      return obj[key].includes(searchKey);
    })
  });
}

filterIt(aa, 'txt');

标签: javascriptarraysobjectecmascript-6filter

解决方案


尝试Object.values改用:

var aa = [{id: 1,type: 1,status: 1,name: 'txt'},{id: 2,type: 1,status: 1,name: 'txt'},{id: 3,type: 0,status: 0,name: 'txt'}];

function filterIt(arr, searchKey) {
  return arr.filter(function(obj) {
    return Object.values(obj).includes(searchKey);
  });
}

console.log(filterIt(aa, 'txt'));
.as-console-wrapper { max-height: 100% !important; top: auto; }

您还可以使此代码更紧凑:

var aa = [{id: 1,type: 1,status: 1,name: 'txt'},{id: 2,type: 1,status: 1,name: 'txt'},{id: 3,type: 0,status: 0,name: 'txt'}];

const filterIt = (arr, searchKey) => arr.filter(obj => Object.values(obj).includes(searchKey));

console.log(filterIt(aa, 'txt'));
.as-console-wrapper { max-height: 100% !important; top: auto; }


推荐阅读