【发布时间】:2018-09-04 15:52:06
【问题描述】:
TLDR:如何使用解构来加速基于同一接口的另一个对象的一个对象的部分更新?
我想使用新的 ECMA2015 - 2017 JavaScript 来重构我的代码。
为简单起见,假设我有一个对象,如下所示:
export interface myObj {
name: string;
id: number;
description: string;
someBool: boolean;
anotherBool: boolean;
}
(导出接口有效,因为我正在使用 Typescript 在 Angular 中工作)。
这里是旧的 es5 函数:
updateMyObj = function(oldObj, newObj) {
var someBoolSaved = oldObj.someBool;
var anotherBoolSaved = oldObj.anotherBool;
oldObj = newObj;
oldObj.someBool = someBoolSaved;
oldObj.anotherBool = anotherBoolSaved;
}
如您所见,该函数应该更新 oldObj 的某些部分,但也要保留一些部分。
这是我重构代码的尝试:
updateObj(oldObj, newObj) {
let {someBool, anotherBool} = oldObj;
oldObj = newObj;
// Here is the part where I don't know how to proceed.
}
但我不知道,我现在如何将 oldObj 的布尔值分配给保存的布尔值。
一种不优雅的方式是
oldObj.someBool = someBool;
oldObj.anotherBool = anotherBool;
在这个例子中会很好。但在我的实际任务中,这会花费很多代码行,这就是我要重构的原因。
我只是想不出正确的语法。
我编写此代码的尝试如下所示:
oldObj = {someBool, anotherBool}
但这不起作用。
【问题讨论】:
-
export interface ...?即使是 ES2018 草案也没有interface意味着什么,它仍然是一个“未来的保留词”。 -
那是因为我猜我正在使用 Angular 和 Typescript。我在问题中编辑了它:)
-
"
oldObj = newObj;" - 抱歉什么?我认为您应该首先开始将您的 ES5 代码简化为function updateMyObj(oldObj, newObj) { newObj.someBool = oldObj.someBool; newObj.anotherBool = oldObj.anotherBool; } -
谢谢@Bergi。那甚至更短。不过,你会如何在 ES6+ 中编写它?
-
@J.Hesters 实际上并没有什么不同。这非常简单明了。副本中和 T.J.Crowder 提到的技术并没有太大的收获。
标签: javascript ecmascript-6 refactoring destructuring object-destructuring