Превратить массив в объекты в javascript - PullRequest
2 голосов
/ 20 января 2020

Я пытаюсь отсортировать большую коллекцию данных в скрипте приложения Google листов, который не поддерживает ES6! (Я думаю)

Массив выглядит примерно так: var data = [["Frank", "franck@gmail.com", 21], ["Mark", "Mark@gmail.com", 23]]

Мне бы понравилась идея превратить массив в объекты, где я могу получить доступ к каждому объекту по имени, например:

Frank.name
Frank.email
Frank.age

Я попробовал следующее

function Driver(name, email, age) {
    this.name= name;
    this.email= email;
    this.age = age;
  }

, а затем

for(var i=0; i<data.length; i++){
  data[i][0]= new Driver (data[i][0],data[i][1],data[i][2])
}

Но это не работает Можете ли вы помочь мне с этим?

1 Ответ

6 голосов
/ 20 января 2020

Если я понимаю ваше требование

Мне бы очень понравилась идея превратить массив в объекты, где я могу получить доступ к каждому объекту с именем

, тогда Решение так просто, как это:

ES6 Версия

function Driver(name, email, age) {
    this.name= name;
    this.email= email;
    this.age = age;
}

const data = [["Frank","franksmail",2], ["name2", "mail2", 3], ["name3", "mail3", 4]]


const mappedData = data
//map the array of arrays to an array of Drivers
.map(props => new Driver(...props))
//reduce the array of drivers to a single object
.reduce((accumulator, currentDriver) => {
    accumulator[currentDriver.name] = currentDriver
    return accumulator
}, {})


console.log(mappedData)
console.log(mappedData.Frank.email)

ES5 Версия:

function Driver(name, email, age) {
    this.name= name;
    this.email= email;
    this.age = age;
}
var data = [["Frank","franksmail",2], ["name2", "mail2", 3], ["name3", "mail3", 4]]


var mappedData = data
//map the array of arrays to an array of Drivers
.map(function (props) {
  return new Driver(props[0], props[1], props[2])
})
//reduce the array of drivers to a single object
.reduce(function (accumulator, currentDriver) {
    accumulator[currentDriver.name] = currentDriver
    return accumulator
}, {})


console.log(mappedData)
console.log(mappedData.Frank.email)

Предупреждение:
Если вам нужно Divers с одинаковым name в вашем массиве data, то вы потеряете один из их.

...