我基本上试图实现对任何给定值的搜索应该在对象键值数组中查找(也可以是嵌套对象)。这是一个例子。下面的函数将采用一个对象和一个查询来搜索数组对象键值。因此,如果找到匹配项,它应该从该数组中进行过滤。
function searchObj (obj, query) {
for (var key in obj) {
var value = obj[key];
if (typeof value === 'object') {
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);
例如:如果我调用 searchObj(obj,'2017-07-15')
它会返回该特定对象,但如果我搜索 trans1
或只是 trans
它应该查看对象然后返回匹配项。我现在有点陷入困境,任何帮助将不胜感激。谢谢。
最佳答案
情况 1 有效,因为您没有遇到递归。但在情况 2 中,即使找到结果,你仍会继续搜索。
找到后返回对象。
if (typeof value === 'object') {
return searchObj(value, query);
}
if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
return obj;
}
function searchObj (obj, query) {
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);
关于javascript - 在 javascript 中的对象数组中搜索深度嵌套的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796948/