Tome o seguinte pedaço de código:

 data.map(song =>
	const artistName = song.artist.name
	const songTitle = song.title
                ...


Podemos fazer um destructuring na referência songartist da primeira const, title na segunda, veja:

data.map(({artist, title})	 =>
	const artistName = artist.name
	const songTitle = title
                ...


podemos ainda ir além e declarar outro destructuring derivado da artist, veja só:

data.map(({artist:{name}, title}) =>
	const artistName = name
	const songTitle = title
                ...




Um segundo exemplo do poder do destructuring:

const doSomething  = pessoa => {
  	const name = pessoa.name  
	const age = pessoa.age
	            ...

no exemplo acima, a função recebe um objeto pessoa como argumento, e atribui à constante name e age os atributos name e age do objeto pessoa… Essa função é similar a seguinte:

const doSomething  = ({name, age}) => {
  	            ...


desse modo, nem precisamos declarar as variáveis name e age, visto que elas ja vieram como parâmetros no destructuring do objeto. Podemos observar que poupamos muitas linhas de código, deixando-o mais enxuto e legível