javascript - ESLint 错误使用 Object.keys 而不是 for..in

标签 javascript

我正在编写下面的代码,它工作得很好。但是,ESLint 建议使用 Object.keys 而不是 for..in 循环。我尝试迭代keys,如果找到匹配则进行搜索然后返回对象。它适用于for..in,但不适用于Object.keys。我尝试用 filter 替换 forEach 但对我不起作用。任何建议。

function searchObj (obj, query) {

  // Object.keys(obj).forEach(function(key){
  for (var key in obj) {
    var value = obj[key];
    if (typeof value === 'object') {
       return searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }
  }
}

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);

这是链接JS bin

最佳答案

因为您并没有真正使用找到的对象,只是因为它在那里。如果您已经发现它与搜索查询匹配,则可以使用 Array.prototype.some 来避免循环遍历 obj 中的每个键。

function searchObj (obj, query) {
  return Object.keys(obj).some(function(key) {
    var value = obj[key];
    if (typeof value === 'object') {
       return searchObj(value, query);
    }
    
    return typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1;
  });
}

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);

关于javascript - ESLint 错误使用 Object.keys 而不是 for..in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798589/

相关文章:

javascript - 如何在 Electron 中获取添加的BrowserView的控制台输出?

Javascript 或 webgl 性能限制

javascript - 一次向 div 添加一个新字符,而不是使用 javascript 成堆添加

javascript - 从 HTML 读取数字,添加数字并返回 HTML

javascript - 如何创建纯色填充的 html 条形图?

javascript - 在 Photoshop cc 20.0.0 中通过批量智能对象中的脚本替换内容(替换图层)

javascript - 使用 Javascript 清空 FileUpload 文本

javascript - 如何使用 Javascript 将小数转换为百分比

javascript - 不同鼠标悬停时发出多种声音

javascript - Couchbase 与 Cloudant CouchDB——reduce 中与 Javascript 的差异