[英]How to filter array of object and filter out values based on another array? Filtering should happen based on keys not values
我有一個 object 數組,必須基於另一個數組進行過濾,鍵列在允許的數組中,請幫助使用 object.entries 並減少但沒有用
const filter = _.filter;
const data = [{
id: 1,
row: [{
id: 'a',
name: 'ab',
code: 'sdf',
version: 1
},
{
id: 'b',
name: 'bc',
code: 'def',
version: 3
},
{
id: 'c',
name: 'cd',
code: 'afd',
version: 2
},
]
},
{
id: 2,
row: [{
id: 'd',
name: 'ef',
code: 'sdf',
version: 1
},
{
id: 'e',
name: 'gh',
code: 'def',
version: 3
},
{
id: 'f',
name: 'ij',
code: 'afd',
version: 2
},
]
},
{
id: 3,
row: [{
id: 'g',
name: 'kl',
code: 'asd',
version: 2
},
{
id: 'h',
name: 'mn',
code: 'faf',
version: 3
},
{
id: 'i',
name: 'op',
code: 'dfs',
version: 1
},
]
}
]
const allowed = ['id', 'name']
let result = [{
id: 1,
row: [{
id: 'a',
name: 'ab'
},
{
id: 'b',
name: 'bc'
},
{
id: 'c',
name: 'cd'
},
]
},
{
id: 2,
row: [{
id: 'd',
name: 'ef'
},
{
id: 'e',
name: 'gh'
},
{
id: 'f',
name: 'ij'
},
]
},
{
id: 3,
row: [{
id: 'g',
name: 'kl'
},
{
id: 'h',
name: 'mn'
},
{
id: 'i',
name: 'op'
},
]
}
]
result = data.filter(el => el.row.filter(elm => Object.fromEntries(allowed.map(k => [k, elm[k]]))));
console.log(result);
您可以使用Array.map
創建一個新數組。
邏輯
row
。Object.fromEntries
const data = [{ id: 1, row: [ { id: 'a', name: 'ab', code: 'sdf', version: 1 }, { id: 'b', name: 'bc', code: 'def', version: 3 }, { id: 'c', name: 'cd', code: 'afd', version: 2 }, ] }, { id: 2, row: [ { id: 'd', name: 'ef', code: 'sdf', version: 1 }, { id: 'e', name: 'gh', code: 'def', version: 3 }, { id: 'f', name: 'ij', code: 'afd', version: 2 }, ] }, { id: 3, row: [ { id: 'g', name: 'kl', code: 'asd', version: 2 }, { name: 'mn', code: 'faf', version: 3 }, { id: 'i', name: 'op', code: 'dfs', version: 1 }, ] } ] const allowed = ['id', 'name']; const result = data.map(({ row, ...rest }) => { return {...rest, row: row.map(elm => Object.fromEntries(allowed.map(k => [k, elm[k]]))) } }); console.log(result);
很長的路要走,但它有效:
const data = [ {id: 1, row: [ {id: 'a', name: 'ab', code: 'sdf', version: 1}, {id: 'b', name: 'bc', code: 'def', version: 3}, {id: 'c', name: 'cd', code: 'afd', version: 2}, ] }, {id: 2, row: [ {id: 'd', name: 'ef', code: 'sdf', version: 1}, {id: 'e', name: 'gh', code: 'def', version: 3}, {id: 'f', name: 'ij', code: 'afd', version: 2}, ] }, {id: 3, row: [ {id: 'g', name: 'kl', code: 'asd', version: 2}, {id: 'h', name: 'mn', code: 'faf', version: 3}, {id: 'i', name: 'op', code: 'dfs', version: 1}, ] } ]; const allowed = ['id', 'name']; let res = []; data.forEach((el) => { let obj = {}; obj.id = el.id; obj["row"] = []; let row = buildArray(el.row); obj["row"].push(row); res.push(obj); }) function buildArray(row) { r = {}; allowed.forEach((k) => { r[k] = row[0][k]; }) return r; } console.log(res)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.