过滤javascript中的嵌套对象



我有一个嵌套很重的对象,看起来像这样:

data = [{
id: 1, 
tables: {
headers: [
{headerName: 'First Name', 
values: [
{id: 1, text_value: 'John', unique_id: '3UPYR2'}
{id: 2, text_value: 'Nick', unique_id: 'WKKHCM'}
]}, 
{headerName: 'Last Name', 
values: [
{id: 1, text_value: 'Doe', unique_id: '3UPYR2'}
{id: 2, text_value: 'Smith', unique_id: 'WKKHCM'}
]}
]
} 
}]

我想做的是过滤掉这个对象,但查询它的unique_id属性为每个头,这样我就可以创建一个对象,像这样:

data = [{
id: 1, 
tables: {
headers: [
{headerName: 'First Name', 
values: [
{id: 1, text_value: 'John', unique_id: '3UPYR2'}
]}, 
{headerName: 'Last Name', 
values: [
{id: 1, text_value: 'Doe', unique_id: '3UPYR2'}
]}
]
} 
}]

我试着在这篇文章(https://stackoverflow.com/questions/56371728/how-can-i-filter-nested-objects-and-arrays-with-javascript#:~:text=Here%20nested%20some%20is%20used%20to)上实现解决方案,但这只是返回原始对象。

我这样更新了这个实现:

let filetered = data.filter(rec => {
let final = rec.table.some(({headers}) => headers.some(({values}) => values.some(({unique_id}) => unique_id === myUniqueId)))
return final
})

不完全确定这是如何工作的,或者这里出了什么问题。

遍历所有header并过滤其values属性。

const data = [{
id: 1, 
tables: {
headers: [
{headerName: 'First Name', 
values: [
{id: 1, text_value: 'John', unique_id: '3UPYR2'},
{id: 2, text_value: 'Nick', unique_id: 'WKKHCM'}
]}, 
{headerName: 'Last Name', 
values: [
{id: 1, text_value: 'Doe', unique_id: '3UPYR2'},
{id: 2, text_value: 'Smith', unique_id: 'WKKHCM'}
]}
]
} 
}]
const unique_id = "3UPYR2";
data.forEach(d => 
d.tables.headers.forEach(h => 
h.values = h.values.filter(v => v.unique_id == unique_id)))
console.log(data);

最新更新