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

如何在JavaScript中选择性地定义/声明对象的键?[重复]

王炜
2023-03-14

给定一个对象

s = {
   a:1,
   b:2
}

我可以定义一个新对象,其字段取决于s的内容,

说些像

t = {
   d: s.a ? 1 : 2
}

然后字段d的值取决于s.a(d的值取决于是否定义了s.a)。

如何根据s的值排除对象中的字段,类似于

t = {
   d: s.a ? 1 : undefined
}

但这不起作用。。。

我知道这可以通过两个if来实现,但我正在寻找一个优雅的解决方案

我的物体非常大,所以我不想做类似的事情

t = s.a? {
       d: 1 
    } : {}

编辑我看到了各种各样的解决方案,我正在寻找一种单一/变化最小且可读的解决方案。类似于惯用javascript的ecmascript 6

编辑这里找到的副本似乎是javascript的,并且确实给出了这个问题的正确答案。我希望新的ecmascript可能对这个问题有一个更新的解决方案

共有3个答案

云瑞
2023-03-14
let s = {
    a : 1
}

let data = {};
if(!!s.a) {
    data.a = s.a;
}

console.log(data);
许兴文
2023-03-14

您并没有真正说出要解决的问题,但通常有几种解决方案:

如果属性的值应该相等,这是很好的。由于属性名称不同,您需要映射它们:

const source = {
   a: 10,
   b: 12
}
const propertyNameMap = {
   a: "alpha",
   b: "beta"
}
const target = {};
for(let i in source) {
    if(source.hasOwnProperty(i) && propertyNameMap[i]) {
        target[propertyNameMap[i]] = source[i];
    }
}

如果属性需要唯一的转换,但相互依存,则可以为目标对象定义一个getter。请注意,这具有明显的性能影响,实际上并不比静态生成值好多少,除非它们随时间变化:

// eg. if alpha maps to ASCII letter:
Object.defineProperty(target, "alpha", {
    get: function() {return String.fromCharCode(a.a);},
    enumerable: true
});
茅炯
2023-03-14

试试这个:

var t = $.extend({}, {
    d: s.a ? 1 : undefined
});
 类似资料:
  • 我有重复的变量声明,我认为它们可以通过for循环来改进,但是我的尝试失败了。 我尝试了数组的for-loop声明器,但我的语法不起作用。 我有一个“工作代码”: 我试图减少它是这样的: 预期结果: 与“工作代码”相同的结果: 当我单击“menu1”div时: 实际错误消息:“意外标记=”“未捕获的TypeError:菜单[0][i].AddEventListener不是函数” 编辑:我发现了一个巨

  • 我想从选择一个菜单中选择一个自定义对象。它既不显示错误也不显示值。我该怎么办? 我的xhtml文档: 我的管理Bean类:

  • 在编写对象时,有没有方法键入对象的属性?与预先定义类型/接口相反。 我唯一能想到的是,但这太宽松了。考虑一下: 我想要<code>myData。myComment</code>抛出相同的错误。 这当然是一个微不足道的例子。但是如果我正在写一个大的复杂的对象,能够动态地声明它的部分类型会很好。

  • 我从一个API获得一个对象,并在它里面用其他API响应创建新的对象,例如: API响应1: API响应2: 当我试图在属性的之后给出时,我无法访问创建的属性,返回。但是,当我为任何对象提供时,所创建的属性就在那里。

  • 我有以下物品清单: 我想像这样选择不同的帐户: 我尝试过使用角度过滤器方法: 但是,它返回与输入相同的列表。谁能告诉我我做错了什么?

  • 我正在使用maven项目进行UI自动化,我需要在多个环境和多个浏览器中运行一些测试。我已经创建并添加了pom.xml文件,并声明了其中的属性。但是当我通过终端执行它时,我得到了错误。我用的命令- 错误-[信息]扫描项目...[ERROR][ERROR]处理POM时遇到一些问题:[FATAL]不可解析POM d:\work\cucumber_projects\ui-automation-projec