[英]How can i apply a filter to a nested array?
我試圖在多個數組上創建一個多重過濾器,但我不知道如何在不復制嵌套數組的情況下對其進行過濾。 我正在將vuejs與一些正在使用數組的插件一起使用,所以我實際上不能更改它,只需過濾即可。
我正在使用draggablevue顯示可以排序的數組列表。 我希望主數組保持不變,僅按名稱或代碼過濾“ inv”數組。 我玩過forEach,地圖,過濾器,但找不到任何在線幫助我解決此問題的方法。
let invNameFilter = " cadeira";
let invCodeNameFilter = "1234";
let salas = [
{
name: "Sala 1.14",
inv: [
{
name: "cadeira",
inventoryCode: "1234"
},
{
name: "quadro",
inventoryCode: "4321"
},
{
name: "mesa",
inventoryCode: "1234"
}
]
},
{
name: "Sala 1.12",
inv: [
{
name: "mesa",
inventoryCode: "4321"
},
{
name: "cadeira",
inventoryCode: "4321"
}
]
}
];
let invNameFilter = " cadeira";
let invCodeNameFilter = "1234";
let salas = [
{
name: "Sala 1.14",
inv: [
{
name: "cadeira",
inventoryCode: "1234"
},
{
name: "mesa",
inventoryCode: "1234"
}
]
},
{
name: "Sala 1.12",
inv: [
{
name: "cadeira",
inventoryCode: "4321"
}
]
}
];
請注意,此代碼不會傳遞初始salas
數組。
new Vue({ data() { return { name: "cadeira", code: "1234", salas: [{ name: "Sala 1.14", inv: [{ name: "cadeira", inventoryCode: "1234" }, { name: "quadro", inventoryCode: "4321" }, { name: "mesa", inventoryCode: "1234" } ] }, { name: "Sala 1.12", inv: [{ name: "mesa", inventoryCode: "4321" }, { name: "cadeira", inventoryCode: "4321" } ] } ] } }, computed: { filteredSalas() { // as alternative use _.deepClone (lodash function) const arr = JSON.parse(JSON.stringify(this.salas)); arr.forEach(obj => { obj.inv = obj.inv.filter(item => item.name === this.name && item.inventoryCode === this.code); }); return arr; } }, template: "<div>{{ filteredSalas }}</div>" }).$mount("#app");
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"></div>
假設您的對象結構保持不變,則可以混合使用map
, filter
和Object spread
操作。
inv
) inv
過濾(應用過濾器功能以返回所需的結果) const salas = [ { name: "Sala 1.14", inv: [ { name: "cadeira", inventoryCode: "1234" }, { name: "quadro", inventoryCode: "4321" }, { name: "mesa", inventoryCode: "1234" } ] }, { name: "Sala 1.12", inv: [ { name: "mesa", inventoryCode: "4321" }, { name: "cadeira", inventoryCode: "4321" } ] } ]; const filteredSalas = salas.map(x => ({ ...x, inv: x.inv.filter(k => k.name === "cadeira" || k.inventoryCode === "1234") })) console.log(filteredSalas);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.