当前位置: 首页 > 知识库问答 >
问题:

在JavaScript对象中仅保留某些属性

壤驷敏学
2023-03-14

我有一个目标。我想通过删除除某些特定属性之外的所有属性来修改对象(而不是克隆它)。例如,如果我从这个对象开始:

var myObj={
    p1:123,
    p2:321,
    p3:{p3_1:1231,p3_2:342},
    p4:'23423',
    //....
    p99:{p99_1:'sadf',p99_2:234},
    p100:3434
}

并且只需要属性p1、p2和p100,如何获得此对象:

var myObj={
    p1:123,
    p2:321,
    p100:3434
}

我明白如何用蛮力做到这一点,但我想要一个更优雅的解决方案。

共有3个答案

鲁阳焱
2023-03-14

您可以使用这种方法:

let result=({p1,p2,p100})=

这是我在学校学到的https://stackoverflow.com/a/25554551/470749.

夏理
2023-03-14

只需重新初始化对象:

myObj = {
    p1:   myObj.p1,
    p2:   myObj.p2,
    p100: myObj.p100
};

另一种方法是删除某些不太有效的属性:

var prop = ['p1', 'p2', 'p100'];
for (var k in myObj) {
    if (prop.indexOf(k) < 0) {
        delete myObj[k];
    }
}
弘承业
2023-03-14

这是谷歌搜索“js只保留某些密钥”时的第一次成功,所以可能值得更新。

最“优雅”的解决方案可能只是使用下划线。js

_.pick(myObj, 'p1', 'p2', 'p100')
 类似资料:
  • 如果我有一个物体 并创建这些对象的数组 有没有一种方法可以让我只检索数组中所有对象的一个属性?例如: 上面的示例没有将set keyArray返回给任何东西,但我希望它可以设置成如下所示: 有没有人知道这样做的方法,而不需要遍历objArray并手动将每个键属性复制到键数组?

  • 问题内容: 如何编写一个在ES6中仅以最紧凑的方式仅包含很少的属性的函数? 我想出了使用解构+简化对象文字的解决方案,但是我不喜欢代码中重复的字段列表。 有没有更苗条的解决方案? 问题答案: 尽管不能避免重复字段列表,但这里有些苗条。它使用“参数解构”来避免需要该参数。 @EthanBrown的解决方案更为通用。这是它的更惯用的版本,它使用和计算的属性(部分): 如果我们要保留属性的属性(例如和和

  • 我想做的是保护一些敏感表单免受但不是所有页面中的攻击。 要保护从如果我设置它在config.php它适用于所有的页面.有没有办法做到这一点只有一些页面通过设置在控制器?

  • 问题内容: 如果用户未登录,我想设置一个cookie。 My中间件: 最后添加到中。 问题: 错误:“ WSGIRequest”对象没有属性“ user” 为什么,当我已经激活身份验证和会话中间件时? 另外,有些页面在出现此错误的地方工作流畅。 我究竟做错了什么 ? 问题答案: 根据FineManual: 因此,我想你最好在auth和会话中间件之前添加你的中间件(假设它仅处理响应)。 话虽这么说,

  • 问题内容: 如果我创建这样的对象: 生成的对象会 总是 这样吗? 也就是说,属性的顺序是否与我添加它们的顺序相同? 问题答案: 自ES2015起,对象的迭代顺序遵循一组特定的规则,但不(始终)遵循插入顺序。简而言之,迭代顺序是字符串键的插入顺序和数字键的升序的组合: 使用数组或Map对象可能是实现此目的的更好方法。Map与密钥共享一些相似之处Object并保证密钥按插入顺序进行迭代,无一例外: M

  • 问题内容: 基本上,我有一个带有的表单,用于选择要使用的数据集(值分别为“ m”,“ f”和“ c”)。然后,我有一个字典/对象,其数据位于: 现在我需要/ / 但我不知道如何使用语法-我已经试过: 什么是正确的语法/方法? 问题答案: 由于您是通过变量引用属性,因此需要使用括号表示法。 …这与您传递字符串时使用的表示法相同。