javascript - JavaScript Object.assign 的逆
问题描述
我有一个平面 JavaScript 对象dictionary
,我想根据其他平面对象对其进行更新。有时我想添加一个对象的每个属性,dictionary
有时我想删除dictionary
另一个对象中存在的每个键。稍后我将使用这些属性的值,但为了管理dictionary
,我只关心它们的名称。
从这个问题,我知道如何合并属性(例如,使用Object.assign
)。我怎样才能做到这一点呢?Object.unassign
不存在,但有类似的吗?
例如:
dictionary = { foo: 'bar', baz: 'qux' };
object1 = { spam: 'spam' };
Object.assign(dictionary, object1); // dictionary now has properties: foo, baz, spam
object2 = { foo: 'spam', baz: 'qux' };
Object.unassign(dictionary, object2); // dictionary is now only { spam: 'spam' }
解决方案
没有这样的内置函数,但是编写自己的函数来完成类似的事情是很简单的:
const dictionary = { foo: 'bar', baz: 'qux' };
const object1 = { spam: 'spam' };
const object2 = { foo: 'spam', baz: 'qux' };
Object.assign(dictionary, object1);
const unassign = (target, source) => {
Object.keys(source).forEach(key => {
delete target[key];
});
};
unassign(dictionary, object2);
console.log(dictionary);
(虽然您可以更改Object.prototype
并添加此unassign
函数,但改变内置对象是非常糟糕的做法 - 最好制作一个独立函数)
推荐阅读
- sql - SQL 相关性和/或别名
- python - 查找并替换以小写开头的正确句子 case 句子。正则表达式或崇高
- ios - 为什么我以前的 viewController 中的变量不会显示在我的 labelText 中
- kubernetes - helm init '目标机器主动拒绝' 错误
- javascript - v-show 在我的代码中没有像我预期的那样工作
- java - 返回时不兼容的类型
- python - 删除与单元格值相关的行 = 无
- javascript - 如何修复500内部
- javascript - 尝试在 Flex Twilio 中启用传入 SMS 的声音
- bootstrap-4 - 打字稿引导导航栏工作示例