过滤JavaScript中的嵌套对象
此代码段仅用于使用字符串值筛选对象数组 那么,如何使代码片段适应嵌套对象,以便它可以过滤对象数组以及其中的嵌套对象呢过滤JavaScript中的嵌套对象,javascript,arrays,object,Javascript,Arrays,Object,此代码段仅用于使用字符串值筛选对象数组 那么,如何使代码片段适应嵌套对象,以便它可以过滤对象数组以及其中的嵌套对象呢 mainLogic=(\u数据,搜索)=>{ //_数据是一个对象数组 让_allsearch=search.trim().toLowerCase(); 如果(_allsearch.length>0){ _数据=对象。值(_data)。过滤器((obj)=>{ 返回Object.keys(obj).some((key)=>{ //当代码遇到嵌套对象时,代码通常在此点中断 返回ob
mainLogic=(\u数据,搜索)=>{
//_数据是一个对象数组
让_allsearch=search.trim().toLowerCase();
如果(_allsearch.length>0){
_数据=对象。值(_data)。过滤器((obj)=>{
返回Object.keys(obj).some((key)=>{
//当代码遇到嵌套对象时,代码通常在此点中断
返回obj[key].toLowerCase().includes(_allsearch);
});
});
}
返回数据;
};
这是一个示例对象:
let _data = [
{
id: "1",
firstname: "Precious",
lastname: "Same",
age: "29",
state: "Abia",
email: "sam@gmail.com",
country: "Michigan",
town:{
name:"Jos"
}
},
{
id: "2",
firstname: "Bolu",
lastname: "Joke",
age: "32",
state: "Ogun",
email: "bolu.joke@outlook.com",
country: "america",
town:{
name:"California"
}
}
]
调用函数时:
this.mainLogic(_data,“california”)
这就是我所期望的:
[
{
id: "2",
firstname: "Bolu",
lastname: "Joke",
age: "32",
state: "Ogun",
email: "bolu.joke@outlook.com",
country: "america",
town:{
name:"Califonia"
}
}
]
免责声明:代码主要源于 我只是将对象展平,这样每个属性都在同一层上,而不需要满足嵌套对象的需要。之后,过滤的方式与您现在的方式相同。(忽略验证和错误检查,您可以调整代码)
let数据=[{
id:“1”,
名字:“珍贵”,
姓氏:“相同”,
年龄:"29岁",,
国家:“Abia”,
电子邮件:“sam@gmail.com",
国家:“密歇根”,
城镇:{
姓名:“何塞”
}
},
{
id:“2”,
名字:“博鲁”,
姓:“笑话”,
年龄:"32岁",,
国家:“奥贡”,
电子邮件:“博鲁。joke@outlook.com",
国家:“美国”,
城镇:{
姓名:“加利福尼亚”
}
}
];
函数对象(ob){
var toReturn={};
用于(ob中的var i){
如果(!ob.hasOwnProperty(i))继续;
如果((对象的类型[i])=='object'){
var flatObject=flatObject(ob[i]);
用于(flatObject中的变量x){
如果(!flatObject.hasOwnProperty(x))继续;
t返回[i+'.+x]=flatObject[x];
}
}否则{
toReturn[i]=ob[i];
}
}
回归回归;
};
功能主逻辑(数据、搜索){
对于(让obj表示数据){
展平=展平对象(obj);
if(Object.values(flatted).includes(search))返回obj;
};
};
log(mainLogic(data,“California”)
免责声明:代码主要来自
我只是将对象展平,这样每个属性都在同一层上,而不需要满足嵌套对象的需要。之后,过滤的方式与您现在的方式相同。(忽略验证和错误检查,您可以调整代码)
let数据=[{
id:“1”,
名字:“珍贵”,
姓氏:“相同”,
年龄:"29岁",,
国家:“Abia”,
电子邮件:“sam@gmail.com",
国家:“密歇根”,
城镇:{
姓名:“何塞”
}
},
{
id:“2”,
名字:“博鲁”,
姓:“笑话”,
年龄:"32岁",,
国家:“奥贡”,
电子邮件:“博鲁。joke@outlook.com",
国家:“美国”,
城镇:{
姓名:“加利福尼亚”
}
}
];
函数对象(ob){
var toReturn={};
用于(ob中的var i){
如果(!ob.hasOwnProperty(i))继续;
如果((对象的类型[i])=='object'){
var flatObject=flatObject(ob[i]);
用于(flatObject中的变量x){
如果(!flatObject.hasOwnProperty(x))继续;
t返回[i+'.+x]=flatObject[x];
}
}否则{
toReturn[i]=ob[i];
}
}
回归回归;
};
功能主逻辑(数据、搜索){
对于(让obj表示数据){
展平=展平对象(obj);
if(Object.values(flatted).includes(search))返回obj;
};
};
console.log(mainLogic(data,“California”)
有必要对对象进行平面化处理,然后可以轻松地筛选数组:
_data.forEach((el, i) => {
let flattenedObject = flatObject(el);
if (Object.values(flattenedObject).includes(searchWord))
_data = _data.filter((f, ind) => ind == i);
})
例如:
let\u数据=[
{
id:“1”,
名字:“珍贵”,
姓氏:“相同”,
年龄:"29岁",,
国家:“Abia”,
电子邮件:“sam@gmail.com",
国家:“密歇根”,
城镇:{
姓名:“何塞”
}
},
{
id:“2”,
名字:“博鲁”,
姓:“笑话”,
年龄:"32岁",,
国家:“奥贡”,
电子邮件:“博鲁。joke@outlook.com",
国家:“美国”,
城镇:{
姓名:“加利福尼亚”
}
}
];
常量flatObject=(对象)=>{
返回Object.assign(
{},
…函数_展平(o){
返回[].concat(…Object.keys(o)
.map(k=>
o[k]=“对象”的类型?
_展平(o[k]):
({[k]:o[k]})
)
);
}(obj)
)
}
让searchWord='California';
_data.forEach((el,i)=>{
设展平对象=展平对象(el);
if(Object.values(扁平对象).includes(searchWord))
_数据=_data.filter((f,ind)=>ind==i);
})
console.log(_数据)代码>有必要将对象展平,然后可以轻松过滤阵列:
_data.forEach((el, i) => {
let flattenedObject = flatObject(el);
if (Object.values(flattenedObject).includes(searchWord))
_data = _data.filter((f, ind) => ind == i);
})
例如:
let\u数据=[
{
id:“1”,
名字:“珍贵”,
姓氏:“相同”,
年龄:"29岁",,
国家:“Abia”,
电子邮件:“sam@gmail.com",
国家:“密歇根”,
城镇:{
姓名:“何塞”
}
},
{
id:“2”,
名字:“博鲁”,
姓:“笑话”,
年龄:"32岁",,
国家:“奥贡”,
电子邮件:“博鲁。joke@outlook.com",
国家:“美国”,
城镇:{
姓名:“加利福尼亚”
}
}
];
常量flatObject=(对象)=>{
返回Object.assign(
{},
…函数_展平(o){
返回[].concat(…Object.keys(o)
.map(k=>
o[k]=“对象”的类型?
_展平(o[k]):
({[k]:o[k]})
)
);
}(obj)
)
}
让searchWord='California';
_data.forEach((el,i)=>{
设展平对象=展平对象(el);
if(Object.values(扁平对象).includes(searchWord))
_数据=_data.filter((f,ind)=>ind==i);
})
console.log(_数据)你能把你的问题编辑得更清楚些吗?我不知道你到底想要什么,或者你有什么问题。请添加一些数据和