最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - ES6 destructuring: How do I create a new object that omits dynamically referenced keys - Stack Overflow

programmeradmin1浏览0评论

Is there an ES6 (and upwards) solution using destructuring and the spread operator to create a new object with a key and value deleted from the original object, when the key reference is dynamic, so:

const state = {
   12344: {
      url: '',
      id: '12344'
   },
   12345: {
      url: '',
      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

Unless it's my present Babel setup, I can't figure out the clean ES6 way of doing this (if it exists).

Many thanks in advance

Is there an ES6 (and upwards) solution using destructuring and the spread operator to create a new object with a key and value deleted from the original object, when the key reference is dynamic, so:

const state = {
   12344: {
      url: 'http://some-url.',
      id: '12344'
   },
   12345: {
      url: 'http://some-other-url.',
      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

Unless it's my present Babel setup, I can't figure out the clean ES6 way of doing this (if it exists).

Many thanks in advance

Share Improve this question edited Sep 4, 2018 at 13:21 user2190690 asked Sep 4, 2018 at 12:36 user2190690user2190690 2,0544 gold badges26 silver badges32 bronze badges 1
  • Why don’t you just use Map? It seems quite more appropriate here. Even if the thing you want to achieve would be possible it is super unreadable – smnbbrv Commented Sep 4, 2018 at 12:39
Add a ment  | 

2 Answers 2

Reset to default 9

when destructuring using dynamic id you need to set a var with the remove value : the doc about this

const state = {
   12344: {
      url: 'http://some-url.',
      id: '12344'
   },
   12345: {
      url: 'http://some-other-url.',
      id: '12345'
   }
}

const idToDelete = 12344

// the removed object will go to unusedVar
const { [idToDelete]: unusedVar, ...newState } = state // dynamic key

console.log('newState:', newState)

a better way if you don't need to keep the deleted object is to use the keyword delete

const state = {
   12344: {
      url: 'http://some-url.',
      id: '12344'
   },
   12345: {
      url: 'http://some-other-url.',
      id: '12345'
   }
}

const idToDelete = 12344

delete state[idToDelete]

console.log('newState:', state)

I don't think it's possible to cleanly achieve with ES6 destructuring. Since other answers include mutating the state, try this instead:

const state = {
   12344: {
      url: 'http://some-url.',
      id: '12344'
   },
   12345: {
      url: 'http://some-other-url.',
      id: '12345'
   }
}

const idToDelete = 12344

const newState = Object.assign({}, state);
delete newState[idToDelete];

console.log('newState:', newState)
console.log('old state:', state);

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论