[{id:1,text:‘3’,value:4},{id:2,text:‘’,value:9},{id:3,text:‘’,value:11}] vue3中找到text为‘’的两项数据并且只要其中的id和value组成新的数组对象
时间: 2025-07-23 20:05:17 浏览: 0
<think>题目要求:在给定的数组中,找到text属性为空的项,然后提取这些项的id和value组成新的对象数组。
原始数据: [{id:1,text:'3',value:4},{id:2,text:'',value:9},{id:3,text:'',value:11}]
预期结果: 新数组应包含两个对象:{id:2, value:9} 和 {id:3, value:11}
在Vue3中,我们可以使用计算属性(computed)来实现,这样当原始数据变化时,新数组会自动更新。
步骤:
1. 使用filter筛选出text为空的项。
2. 使用map对筛选后的每一项提取id和value,形成新对象。
注意:新对象只需要id和value,所以我们可以使用解构赋值取出这两个属性,然后组成一个新对象。
代码示例:</think>### Vue3 中筛选空文本项并提取特定字段组成新数组
在 Vue3 中处理数组 `[{id:1,text:'3',value:4},{id:2,text:'',value:9},{id:3,text:'',value:11}]`,找出所有 `text` 为空的项,并提取其 `id` 和 `value` 组成新数组对象:
#### 解决方案
```vue
<script setup>
import { ref, computed } from 'vue';
// 原始数据
const items = ref([
{id:1, text:'3', value:4},
{id:2, text:'', value:9},
{id:3, text:'', value:11}
]);
// 计算属性:筛选空文本项并提取 id 和 value
const filteredItems = computed(() => {
return items.value
.filter(item => item.text === '') // 筛选 text 为空的项
.map(({ id, value }) => ({ id, value })); // 提取 id 和 value 组成新对象
});
// 输出结果示例
console.log(filteredItems.value);
// 输出: [{id:2, value:9}, {id:3, value:11}]
</script>
<template>
<div>
<h3>空文本项数据:</h3>
<ul>
<li v-for="item in filteredItems" :key="item.id">
ID: {{ item.id }}, Value: {{ item.value }}
</li>
</ul>
</div>
</template>
```
#### 其他实现方式
1. **使用对象解构简化**:
```javascript
const filteredItems = computed(() =>
items.value
.filter(item => !item.text) // 宽松空值检测
.map(({ id, value }) => ({ id, value }))
);
```
2. **使用 reduce 实现**:
```javascript
const filteredItems = computed(() =>
items.value.reduce((acc, item) => {
if (item.text === '') {
acc.push({ id: item.id, value: item.value });
}
return acc;
}, [])
);
```
3. **响应式状态存储**:
```javascript
import { reactive, watchEffect } from 'vue';
const state = reactive({
items: [...], // 初始数据
filtered: []
});
watchEffect(() => {
state.filtered = state.items
.filter(item => item.text === '')
.map(({ id, value }) => ({ id, value }));
});
```
#### 注意事项
1. **字段提取技巧**:
- 使用 ES6 解构语法:`({ id, value }) => ({ id, value })`
- 等价于:`item => ({ id: item.id, value: item.value })`
2. **空值判断优化**:
```javascript
// 包含空字符串和空白字符
.filter(item => !item.text || item.text.trim() === '')
```
3. **性能考虑**:
```javascript
// 大型数据集使用 for 循环
const result = [];
for (const item of items.value) {
if (item.text === '') {
result.push({ id: item.id, value: item.value });
}
}
```
4. **TypeScript 支持**:
```typescript
interface OriginalItem {
id: number;
text: string;
value: number;
}
interface FilteredItem {
id: number;
value: number;
}
const filteredItems = computed<FilteredItem[]>(() => {
return items.value
.filter((item): item is OriginalItem => item.text === '')
.map(({ id, value }) => ({ id, value }));
});
```
5. **动态字段提取**:
```javascript
// 可配置提取字段
const fields = ['id', 'value'];
const filteredItems = computed(() =>
items.value
.filter(item => item.text === '')
.map(item => {
const obj = {};
fields.forEach(field => obj[field] = item[field]);
return obj;
})
);
```
阅读全文
相关推荐



















