簡體   English   中英

JS:按數組過濾對象數組,當object鍵為對象數組時

[英]JS: Filter array of objects by array, when object key is an array of objects

我有一組類似於以下內容的對象:

let array = [
{
id: 1,
name: Foo,
tools: [{id:3, toolname: Jaw},{id:1, toolname: Law}]
},
{
id: 2,
name: Boo,
tools: [{id:2, toolname: Caw}]
},
{
id: 3,
name: Loo,
tools: [{id:3, toolname: Jaw}, {id:4, toolname: Maw}]
}
]

我正在嘗試使用類似於includes對現有數組的內容從上述數組中過濾對象,該數組如下所示:

let secondarray = ['Jaw', 'Taw']

我將如何返回具有在第二個數組中命名的工具的對象列表?

謝謝你的時間!

我想你可能會使用這樣的東西:

let array = [
    {
        id: 1,
        name: 'Foo',
        tools: [{ id: 3, toolname: 'Jaw' }, { id: 1, toolname: 'Law' }]
    },
    {
        id: 2,
        name: 'Boo',
        tools: [{ id: 2, toolname: 'Caw' }]
    },
    {
        id: 3,
        name: 'Loo',
        tools: [{ id: 3, toolname: 'Jaw' }, { id: 4, toolname: 'Maw' }]
    }
]
let secondarray = ['Jaw', 'Taw']
let filteredArray = array.filter(ch => {
    let controlArray = ch.tools.map(t => t.toolname);
    return secondarray.some(t => controlArray.includes(t));
});
console.log(filteredArray);
/**
which returns 

[ { id: 1, name: 'Foo', tools: [ [Object], [Object] ] },
  { id: 3, name: 'Loo', tools: [ [Object], [Object] ] } ]

*/

您可以將some()filter()中的tools一起使用

 let array = [{id: 1,name: 'Foo',tools: [{id: 3,toolname: 'Jaw'}, {id: 1,toolname: 'Law'}]},{id: 2,name: 'Boo',tools: [{id: 2,toolname: 'Caw'}]},{id: 3,name: 'Loo',tools: [{id: 3,toolname: 'Jaw'}, {id: 4,toolname: 'Maw'}]}] let secondarray = ['Jaw', 'Taw'] let filtered = array.filter(item => item.tools.some(obj => secondarray.includes(obj.toolname))) console.log(filtered)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM