Vin*_*Rye 3 javascript destructuring ecmascript-6 object-destructuring
我正在使用一个不可变对象,我需要添加一个减去值的数组。
我知道可以通过以下方式使用ES6销毁。
const {countries, remainder} = someObj // {countries:...,languages:..., ...keys};
Run Code Online (Sandbox Code Playgroud)
最后,剩下的就是没有国家密钥的新对象。
因此,我发现可以在数组上使用reduce来从对象中删除所有值,并使用默认参数作为原始对象,最后返回一个新对象。
但是,我不确定该怎么做,因为键的名称是在数组中定义的。
arrayToRemove.reduce((total, value) => {
const { extractValue: [value], ...remainder } = total
return remainder;
}, { ...originalObj });
arrayToRemove.reduce((total, value) => {
const { [extractValue], ...remainder } = total
return remainder;
}, { ...originalObj });
Run Code Online (Sandbox Code Playgroud)
我期望最终得到一个新的Object,而没有包含在名为arrayToRemove的数组中的键。
我需要在保持不变性的同时执行此操作,因此我不能仅遍历原始对象并将其从中删除,因此我认为以上内容将是解决该问题的一个聪明方法。
任何帮助表示赞赏。
您可以使用带有虚拟值的计算属性名称作为目标属性。
在此处了解更多信息:对象属性分配模式[YDKJS:ES6及更高版本]
var originalObj = { foo: 1, bar: 2, baz: 3, },
arrayToRemove = ['foo', 'bar'],
result = arrayToRemove.reduce((total, key) => {
const { [key]: dummy, ...remainder } = total;
return remainder;
}, originalObj);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
arrayToRemove.reduce((obj, key) => {
const { [key]: value, ...remainder } = obj
return remainder
}, originalObj)
Run Code Online (Sandbox Code Playgroud)