gpt4 book ai didi

javascript - 在 JavaScript 中过滤嵌套对象

转载 作者:行者123 更新时间:2023-11-28 03:19:07 25 4
gpt4 key购买 nike

此代码片段仅用于使用字符串值过滤对象数组。

那么如何使代码片段适合嵌套对象,以便它可以过滤对象数组以及其中的嵌套对象?

mainLogic = (_data, search) => {
//_data is an array of objects
let _allsearch = search.trim().toLowerCase();
if (_allsearch.length > 0) {
_data = Object.values(_data).filter((obj) => {
return Object.keys(obj).some((key) => {
// the code usually breaks at this point. when it encounters a nested object
return obj[key].toLowerCase().includes(_allsearch);
});
});
}
return _data;

};

这是一个示例对象:

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"
}
}
]

最佳答案

需要扁平化对象,然后才能轻松过滤数组:

_data.forEach((el, i) => {
let flattenedObject = flatObject(el);
if (Object.values(flattenedObject).includes(searchWord))
_data = _data.filter((f, ind) => ind == i);
})

一个例子:

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"
}
}
];


const flatObject = (obj) => {
return Object.assign(
{},
...function _flatten(o) {
return [].concat(...Object.keys(o)
.map(k =>
typeof o[k] === 'object' ?
_flatten(o[k]) :
({[k]: o[k]})
)
);
}(obj)
)
}


let searchWord = 'California';

_data.forEach((el, i) => {
let flattenedObject = flatObject(el);
if (Object.values(flattenedObject).includes(searchWord))
_data = _data.filter((f, ind) => ind == i);
})


console.log(_data);

关于javascript - 在 JavaScript 中过滤嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59347746/

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