在javascript中将数组转换为对象

1 javascript arrays javascript-objects google-apps-script

我正在尝试对不支持 ES6 的谷歌表格应用程序脚本中的大量数据进行排序!(我认为)

数组看起来像这样 var data = [["Frank", "franck@gmail.com", 21],["Mark", "Mark@gmail.com", 23]]

我很喜欢将数组转换为对象的想法,在那里我可以通过名称 ex 访问每个对象:

Frank.name
Frank.email
Frank.age
Run Code Online (Sandbox Code Playgroud)

我尝试了以下

function Driver(name, email, age) {
    this.name= name;
    this.email= email;
    this.age = age;
  }
Run Code Online (Sandbox Code Playgroud)

进而

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

但它不起作用你能帮我解决这个问题吗?

Wen*_*lin 5

如果我理解你的要求

我很想把数组变成对象,在那里我可以通过名称访问每个对象

正确,那么解决方案就这么简单:

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

警告:
如果您必须namedata阵列中使用相同的 Divers,那么您将丢失其中之一。