给定一个对象
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可能对这个问题有一个更新的解决方案
let s = {
a : 1
}
let data = {};
if(!!s.a) {
data.a = s.a;
}
console.log(data);
您并没有真正说出要解决的问题,但通常有几种解决方案:
如果属性的值应该相等,这是很好的。由于属性名称不同,您需要映射它们:
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
});
试试这个:
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