[英]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.