javascript - ES6 解构:如何创建一个省略动态引用键的新对象
问题描述
当键引用是动态的时,是否有使用解构和扩展运算符创建一个新对象的 ES6(及更高版本)解决方案,该对象具有从原始对象中删除的键和值,所以:
const state = {
12344: {
url: 'http://some-url.com',
id: '12344'
},
12345: {
url: 'http://some-other-url.com',
id: '12345'
}
}
const idToDelete = 12344
const { [idToDelete], ...newState } = state // dynamic key
console.log('newState:', newState)
// desired newState would only have the key 12345 and its value
除非它是我目前的 Babel 设置,否则我无法弄清楚这样做的干净 ES6 方式(如果它存在的话)。
提前谢谢了
解决方案
使用动态 id 进行解构时,您需要设置一个带有删除值的 var:关于此的文档
const state = {
12344: {
url: 'http://some-url.com',
id: '12344'
},
12345: {
url: 'http://some-other-url.com',
id: '12345'
}
}
const idToDelete = 12344
// the removed object will go to unusedVar
const { [idToDelete]: unusedVar, ...newState } = state // dynamic key
console.log('newState:', newState)
如果您不需要保留已删除的对象,更好的方法是使用关键字delete
const state = {
12344: {
url: 'http://some-url.com',
id: '12344'
},
12345: {
url: 'http://some-other-url.com',
id: '12345'
}
}
const idToDelete = 12344
delete state[idToDelete]
console.log('newState:', state)
推荐阅读
- node.js - Nodejs上的多个setTimeouts
- php - 尝试制作简单的评分系统时出现 PHP 错误 500
- c++ - 将带有可变参数模板参数的 std::tuple 作为其元素类型传递给另一个函数作为参数列表
- google-cloud-platform - 如何将文件从 Google Cloud 复制到本地机器?(云壳)
- php - Yii2上传到mysql数据库中的BLOB数据类型不起作用
- php - CodeIgniter 登录页面在本地服务器上再次加载并显示登录页面,但在实时服务器上工作
- django - 从表单输入重定向到两个不同的视图
- java - 如何从正在迭代但不断变化的文档中获取子字符串
- merge - 如何将现有的每小时分区合并到配置单元中的每日分区
- android - 在 Android 中将模型从 BLE 切换到蓝牙经典