Lodash 的 pick() 函数介绍和使用

发布于 2022-07-14 13:25:34 字数 2898 浏览 284 评论 0

给定一个对象 obj 和一个字符串数组 paths, Lodash 的 pick() 函数 返回一个只有键的新对象 pathsobj

const obj = {
  name: 'Will Riker',
  rank: 'Commander',
  age: 29
};
const picked = _.pick(obj, ['name', 'rank']);

picked === obj; // false
picked.name; // 'Will Riker'
picked.rank; // 'Commander'
picked.age; // undefined

pick() 任何其他语法 Lodash 的 get() 功能 支持。 例如,如果 name 是具有 2 个属性的嵌套对象, firstlast,你可以只选 name.last 并省略 name.first

const obj = {
  name: {
    first: 'Will',
    last: 'Riker'
  },
  rank: 'Commander',
  age: 29
};
const picked = _.pick(obj, ['name.last', 'rank']);

picked === obj; // false
picked.name.first; // undefined
picked.name.last; // 'Riker'
picked.rank; // 'Commander'
picked.age; // undefined

pick() 在缺少属性时是允许的。 如果你尝试 pick() 如果父属性未定义,Lodash 将忽略该路径。

const obj = {
  name: 'Will Riker',
  rank: 'Commander',
  age: 29
};
// Lodash will ignore 'this.is.not.in.the.object', because
// that path isn't in the object.
const picked = _.pick(obj, ['name', 'this.is.not.in.the.object']);

picked === obj; // false
picked.name; // 'Will Riker'
picked.rank; // undefined
picked.age; // undefined

其他几个框架也有类似的 pick() 功能。 例如, Mongoose 模式有一个 pick()函数 创建新模式的

Vanilla JS 替代品

您可以使用几种不同的模式来近似 Lodash 的 pick() 原生 JavaScript 中的函数。 我们最喜欢使用 IIFE ,如下所示:

const obj = {
  name: 'Will Riker',
  rank: 'Commander',
  age: 29
};

// Looks tricky, but the idea is that you're calling an anonymous arrow
// function that returns just the `name` and `rank` properties of the passed
// in object.
const picked = (({ name, rank }) => ({ name, rank }))(obj);
picked.name; // 'Will Riker'
picked.rank; // 'Commander'
picked.age; // undefined

下面是一种更易于阅读但不太简洁的方法:

const pickNameRank = ({ name, rank }) => ({ name, rank });
const picked = pickNameRank(obj);

这种 IIFE 方法有一些缺点:

  1. 您需要提前知道属性名称。 扩展此模式以对一组键进行操作会很棘手。
  2. 不支持虚线键。 你不能做类似的事情 ({ 'name.first' }) => ....

我们喜欢的另一种方法是定义一个函数 for 创建一个新对象的循环,如下所示。 这种方法不太简洁,但更灵活。

function pick(obj, keys) {
  const ret = {};
  for (const key of keys) {
    ret[key] = obj[key];
  }
  return ret;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

水晶透心

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文