You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3中如何过滤数组,筛选item=1的项提取指定字段重组新数组

实现方法

直接用JavaScript原生数组的filter+map链式调用即可,Vue3环境不需要额外引入工具库,逻辑分两步:先筛选符合条件的项,再提取指定字段重组为新结构。

基础实现代码

let list = [
  {"name":"1000","properties":{"item":"1","unit":"DZN"}},
  {"name":"2000","properties":{"item":"1","unit":"CTN"}},
  {"name":"3000","properties":{"item":"2","unit":"DZN"}},
  {"name":"4000","properties":{"item":"3","unit":"CTN"}}
]

const result = list
  // 筛选properties.item等于"1"的项,加可选链避免properties为空时报错
  .filter(item => item.properties?.item === "1")
  // 提取需要的字段,重组为目标结构
  .map(item => ({
    name: item.name,
    unit: item.properties.unit
  }))

运行后result的输出就是你期望的结果:

[{"name":"1000", "unit":"DZN"}, {"name":"2000", "unit":"CTN"}]

Vue3响应式场景用法

如果你在Vue3组合式API中使用响应式数据,配合computed可以实现原数组变化时,筛选结果自动更新:

<script setup>
import { ref, computed } from 'vue'
// 定义响应式原始数组
const list = ref([
  {"name":"1000","properties":{"item":"1","unit":"DZN"}},
  {"name":"2000","properties":{"item":"1","unit":"CTN"}},
  {"name":"3000","properties":{"item":"2","unit":"DZN"}},
  {"name":"4000","properties":{"item":"3","unit":"CTN"}}
])

// 计算属性自动追踪依赖,原数组变化时自动重算
const filteredList = computed(() => {
  return list.value
    .filter(item => item.properties?.item === "1")
    .map(item => ({
      name: item.name,
      unit: item.properties.unit
    }))
})
</script>

注意事项

  • 筛选条件里的"1"是字符串类型,如果你的数据中properties.item是数字类型,请把判断条件改为item.properties?.item === 1,避免隐式类型转换导致筛选失效。
  • map回调中返回的是全新对象,不会修改原始数组的数据,不会触发响应式数据的意外更新。
  • 如果你的业务场景需要兼容极低版本浏览器(如IE),可以把可选链?.去掉,改成item.properties && item.properties.item === "1"的判断写法即可。

内容的提问来源于stack exchange,提问作者Sona Rijesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:54:20