我正在尝试编写一个过滤函数,它将一个对象作为参数,将查询字符串作为其第二个参数。该函数应返回与查询字符串匹配的对象中的所有值的列表。
例如
num != int(n)
我的问题是如何处理每个索引对象的嵌套'children'属性?
答案 0 :(得分:1)
尝试使用基于每个属性的数据类型的递归调用。例如,如果嵌套属性是一个数组,则需要在该数组的每个元素上调用filter。在嵌套元素是对象的情况下,您需要查看每个属性并调用过滤器。我把它从袖口上写下来,所以我还没有测试过所有的角落情况,但它适用于你的测试例子:
var results = [];
filter(data,'ra'); //['Grapes', 'Oranges']
console.log(results);
function filter(data,query){
for(var prop in data){
//array
if(Array.isArray(data[prop])){
for(var i = 0; i < data[prop].length; i++){
filter(data[prop][i],query);
}
} else if (typeof data[prop] === "object"){
filter(data[prop],query);
} else if(typeof data[prop] === "string"){
if(data[prop].indexOf(query) > -1){
results.push(data[prop]);
}
}
}
}
答案 1 :(得分:1)
您希望使用递归。
function filter(data, query){
var ret = [];
data.forEach(function(e){
// See if this element matches
if(e.label.indexOf(query) > -1){
ret.push(e.label);
}
// If there are children, then call filter() again
// to see if any children match
if(e.children){
ret = ret.concat(filter(e.children, query));
}
});
return ret;
}