【问题标题】:Turn array into objects in javascript在javascript中将数组转换为对象
【发布时间】:2020-01-20 20:12:25
【问题描述】:

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

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

我希望将数组转换为对象,以便我可以通过名称 ex 访问每个对象:

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])
}

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

【问题讨论】:

  • 数据数组可以做成对象吗?示例:var data= {name: 'John Doe', email: 'john@doe.com', age: 35};
  • 如果你得到相同的名字,你会失去旧的价值,[["Frank", "franck@gmail.com", 21],["Mark", "Mark@gmail.com", 23],[“弗兰克”,“Frank2@gmail.com”,24]]。所以最好将你的数组转换为对象数组并迭代它们。
  • 如果您想转换为对象数组,这可能会有所帮助。 var data = [["Frank","franksmail",2], ["name2", "mail2", 3], ["name3", "mail3", 4]] var drivers = data.map(props =>新司机(...道具))

标签: javascript arrays google-apps-script javascript-objects


【解决方案1】:

如果我了解您的要求

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

没错,那么解决方法就这么简单:

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)

警告:
如果您必须在 data 数组中使用相同的 name Divers,那么您将丢失其中一个。

【讨论】:

  • 如果在数组中得到相同的名称,会丢失旧值。最好转换一个对象数组。
  • 感谢您指出这一点。我知道这个事实,但是 OP 可能不会。 (他要求可以通过它们的名称访问这些对象)。我添加了一条通知
  • 是的,但只是为了通知?
  • @Wendelin Apps Script 不支持 ES6,因此被 TheMaster 否决。
  • @TheMaster 哦,好的。对不起。我确实错过了那个细节。但下次请提供更具体的评论。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-09-09
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多