Можете ли вы использовать существующий массив в левой части деконструкции - PullRequest
0 голосов
/ 06 февраля 2020

С помощью скрипта приложений Google, выпускающего движок V8 с поддержкой ES6, я прошел курс ES6. Что касается деконструкции, я подумал о следующем сценарии, который я использую в своем текущем коде довольно часто.

function oldStyle() {
  var ss = SpreadsheetApp.getActiveSheet()
  var data = ss.getDataRange().getValues()
  var headers = data.shift() //[id, first_name, last_name, email, gender]
  data.forEach(function (row){
   console.log(row[headers.indexOf('first_name')]+" "+row[headers.indexOf('last_name')]) 
  })
}

Использование этого позволяет столбцам быть в любом порядке в электронной таблице, перемещено et c и код все еще будет работать (очевидно, что они не могут быть переименованы, что является недостатком).

Проходя страницу обучения по деконструкции массива, я сразу подумал, что могу использовать переменную headers в качестве левой части деконструкции так что я мог действительно быстро ссылаться на столбцы с минимальным кодом.

function es6() {
  const ss = SpreadsheetApp.getActiveSheet()
  const data = ss.getDataRange().getValues()
  const headers = data.shift() //[id, first_name, last_name, email, gender]
  data.forEach(function (row){
    // Use the headers variable as the left side of destructuring instead of the working line 20
    // let headers = row or
    // let [headers] = row
    // the idea being it's really quick to merge/reference based on column headings
    let [ ,first_name, last_name] = row //instead of having to type the column position in the array
    console.log(`${first_name} ${last_name}`)
  })
}

Протестировав это, я понимаю, почему закомментированный код не работает. Мой вопрос, следовательно, есть ли способ заставить его работать? Или более эффективный способ делать то, что я делаю с row[headers.indexOf('first_name')]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...