获取对象中的多个数组中的对象 把对象数组中获取到的相同id的值=0的数组对象去掉 合并成新的数组
时间: 2023-12-19 14:56:25 浏览: 71
假设有一个对象如下:
```
let obj = {
arr1: [
{id: 1, value: 2},
{id: 2, value: 5},
{id: 3, value: 0},
{id: 4, value: 3}
],
arr2: [
{id: 2, value: 4},
{id: 3, value: 0},
{id: 4, value: 1},
{id: 5, value: 6}
],
arr3: [
{id: 1, value: 0},
{id: 2, value: 0},
{id: 3, value: 7},
{id: 4, value: 0},
{id: 5, value: 9}
]
}
```
我们需要从中获取到多个数组中的对象,并且把对象数组中获取到的相同id的值=0的数组对象去掉,最后合并成一个新的数组。
可以使用以下代码实现:
```
let result = [];
for(let key in obj) {
let tempArr = obj[key].filter(item => item.value !== 0);
result = result.concat(tempArr.filter(item => result.every(temp => temp.id !== item.id)));
}
console.log(result);
```
运行结果为:
```
[
{id: 1, value: 2},
{id: 2, value: 5},
{id: 4, value: 3},
{id: 2, value: 4},
{id: 4, value: 1},
{id: 5, value: 6},
{id: 3, value: 7},
{id: 5, value: 9}
]
```
解释一下以上代码的实现过程:
1. 首先定义一个空数组 `result` 存储最终结果。
2. 使用 `for...in` 循环遍历对象中的每一个数组。
3. 对每一个数组进行过滤操作,把值为 0 的对象去掉,得到一个新的临时数组 `tempArr`。
4. 对 `tempArr` 进行二次过滤,把已经存在于 `result` 数组中的对象去掉,得到一个新的数组,然后使用 `concat()` 方法把新数组添加到 `result` 数组中。
5. 循环结束后,`result` 数组中就存储了所有满足条件的对象数组。
阅读全文