gpt4 book ai didi

javascript - 在javascript中的对象数组中搜索深度嵌套的值

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

我基本上是在尝试实现对任何给定值的搜索,应该在对象键值数组中查找(也可以有嵌套对象)。这是一个例子。下面的函数将使用一个对象和一个查询来搜索数组对象的键值。因此,如果找到匹配项,它应该从该数组中过滤。

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/

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