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

VueJS与Lodash:如何获取仅包含带_new后缀键的对象数组?

如何用Lodash筛选对象中带_new后缀的属性

你的问题出在两个关键细节上:

  1. 你直接对数组使用omitBy,但数组的键是数字索引(比如0、1),这些索引永远不会以_new结尾,所以omitBy相当于没做任何过滤,直接返回原数组。
  2. omitBy的作用是移除符合条件的键,而你需要的是保留带_new后缀的键,应该用pickBy方法更合适。

正确的解决方案

你需要遍历数组中的每一个对象,对每个对象单独使用pickBy来筛选出键以_new结尾的属性。可以结合Lodash的map和pickBy来实现:

<template>
  <div>{{ newProperties }}</div>
</template>
<script>
import { map, pickBy } from "lodash";
import data from "../assets/data.json";
export default {
  data() {
    return {
      localShortNames: data,
    };
  },
  computed: {
    newProperties() {
      // 遍历数组中的每个对象,筛选出带_new后缀的属性
      return map(this.localShortNames, (obj) => 
        pickBy(obj, (value, key) => key.endsWith("_new"))
      );
    },
  },
};
</script>

额外优化:移除属性名的_new后缀

如果希望最终的属性名去掉_new(比如把name_new变成name),可以再结合mapKeys方法做进一步处理:

<template>
  <div>{{ newProperties }}</div>
</template>
<script>
import { map, pickBy, mapKeys } from "lodash";
import data from "../assets/data.json";
export default {
  data() {
    return {
      localShortNames: data,
    };
  },
  computed: {
    newProperties() {
      return map(this.localShortNames, (obj) => {
        // 先筛选出带_new的属性
        const newProps = pickBy(obj, (_, key) => key.endsWith("_new"));
        // 再移除属性名的_new后缀
        return mapKeys(newProps, (_, key) => key.replace("_new", ""));
      });
    },
  },
};
</script>

关于omitBy的替代用法

如果一定要用omitBy,逻辑会反过来:移除不以_new结尾的属性,效果和pickBy一致,但可读性不如pickBy直接:

pickBy(obj, (_, key) => key.endsWith("_new"))
// 等价于
omitBy(obj, (_, key) => !key.endsWith("_new"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:58:13