我有一个嵌套很重的对象,看起来像这样:
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);