gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:05:30 25 4
gpt4 key购买 nike

我正在处理下面的代码,它工作得很好。但是,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com