a数组里每一项是对象,对象里有个字段b也是一个数组,b数组每一项是对象,里面有一个字段selected, 我现在要过滤返回selected为true的哪个对象出来
时间: 2024-03-12 11:49:21 浏览: 64
可以使用`Array`的`filter`和`Array`的`some`方法结合来实现。
代码示例:
```javascript
const a = [
{ id: 1, b: [{ id: 1, selected: true }, { id: 2, selected: false }] },
{ id: 2, b: [{ id: 3, selected: true }, { id: 4, selected: true }] },
];
const result = a.filter((objA) =>
objA.b.some((objB) => objB.selected)
);
console.log(result); // [{ id: 1, b: [{ id: 1, selected: true }, { id: 2, selected: false }] }, { id: 2, b: [{ id: 3, selected: true }, { id: 4, selected: true }] }]
```
解释:
1. 使用`filter`方法遍历`a`数组中的每个对象,返回符合条件的对象。
2. 在`filter`方法中使用`some`方法遍历当前对象的`b`数组,如果有一个对象的`selected`属性为`true`,则返回`true`。
3. 如果`some`方法返回`true`,则当前对象符合条件,会被`filter`方法返回。
相关问题
vue遍历一个数组对象,每个对象里面都有一个date字段,判断date相不相同,在遍历每个对象里面的orderList字段,判断orderList里的status和menuType字段是不是相同 如果相同就把orderList合并在一起
可以按照以下步骤实现:
1. 首先,遍历数组对象,把每个对象的date字段提取出来,放入一个新的数组中,并去重。
```javascript
let dateArr = []
for (let i = 0; i < objArr.length; i++) {
let date = objArr[i].date
if (!dateArr.includes(date)) {
dateArr.push(date)
}
}
```
2. 然后,遍历去重后的日期数组,再遍历原始数组对象,找到相同日期的对象,并把它们的orderList合并在一起,放入一个新的数组中。
```javascript
let mergeArr = []
for (let i = 0; i < dateArr.length; i++) {
let date = dateArr[i]
let tempObj = {date: date, orderList: []}
for (let j = 0; j < objArr.length; j++) {
if (objArr[j].date === date) {
tempObj.orderList = tempObj.orderList.concat(objArr[j].orderList)
}
}
mergeArr.push(tempObj)
}
```
3. 最后,遍历新的数组,把orderList中status和menuType字段相同的项合并在一起。
```javascript
for (let i = 0; i < mergeArr.length; i++) {
let orderList = mergeArr[i].orderList
let tempOrderList = []
for (let j = 0; j < orderList.length; j++) {
let item = orderList[j]
let index = tempOrderList.findIndex((el) => {
return el.status === item.status && el.menuType === item.menuType
})
if (index === -1) {
tempOrderList.push(item)
} else {
tempOrderList[index].amount += item.amount
tempOrderList[index].price += item.price
}
}
mergeArr[i].orderList = tempOrderList
}
```
这样,就可以实现遍历一个数组对象,每个对象里面都有一个date字段,判断date相不相同,在遍历每个对象里面的orderList字段,判断orderList里的status和menuType字段是不是相同 如果相同就把orderList合并在一起的需求了。
在vue2中,将一个数组嵌套对象的数据,中每一项A字段和B字段相加,并添加到一个空的新数组中
在 Vue2 中,如果你有一个包含嵌套对象的数组,每个对象都有 `A` 和 `B` 字段,你可以使用 map 函数配合 lodash 或者原生 JavaScript 的 reduce 方法来实现这个需求。这里我将以原生 JavaScript 为例来说明:
```javascript
let data = [
{ A: 10, B: 20 },
{ A: 30, B: 40 },
{ A: 50, B: 60 }
];
// 创建一个新的空数组来存储结果
let sumArray = [];
// 使用 map 和 reduce 方法计算每个对象的 A+B 并添加到新数组中
sumArray = data.map(obj => obj.A + obj.B);
// 新数组 now 包含每个对象 A 和 B 的和
console.log(sumArray); // 输出: [30, 70, 110]
```
在这个例子中,`map()` 函数遍历数组中的每个对象,`reduce()` 方法用于对每个对象的 `A` 和 `B` 进行累加。如果使用的是 Vue.js 模板语法,可以直接在模板上完成这样的操作,假设有个 `items` 数据属性,可以这么显示:
```html
<template>
<div>
<span v-for="item in items" :key="item.id">
({{ item.A }} + {{ item.B }})
</span>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, A: 10, B: 20 },
{ id: 2, A: 30, B: 40 },
{ id: 3, A: 50, B: 60 }
]
};
}
};
</script>
```
这里的 `<span>` 元素会显示每个对象 `A` 和 `B` 的和。
阅读全文
相关推荐
















