Javascript一对一对象映射(内置函数?)

I s*_*ame 1 javascript arrays object google-apps-script

如果我有2个数组(propertiesdata):

properties = [name, height, weight, zone];

data = [
  ['Luke Skywalker', 123, 112, 'B'],
  ['Jawa', 12, 8, 'B'],
  ['Hutt', 200, 999, 'C']
];
Run Code Online (Sandbox Code Playgroud)

并且我想创建一个对象数组(statistics):

statistics = [{
    name: 'Luke Skywalker',
    height: 123,
    weight: 112,
    zone: 'B'
  },
  {
    name: 'Jawa',
    height: 12,
    weight: 8,
    zone: 'B'
  }, {
    name: 'Hutt',
    height: 200,
    weight: 999,
    zone: 'C'
  }
];
Run Code Online (Sandbox Code Playgroud)

通常,我只会使用map over data[],创建一个temp对象,然后将其推入statistics[]

但是由于我知道所有其他条目data都具有相同的维度和数据类型。我也知道从properties到一对一的映射data。javascript中是否有内置函数,该函数以一对一映射输出对象数组?相似properties.mapAll(data)或相似的东西。我希望不使用库,因为我是.html在GAS中的模板上执行此操作的。

Fra*_*igh 7

如果属性总是会nameheightweightzone那么你可以使用数组解构申请一个占位符名称内存储的值给它map

const data = [['Luke Skywalker', 123, 112, 'B'], ['Jawa', 12, 8, 'B'], ['Hutt', 200, 999, 'C']];

const stats = data.map(([name, height, weight, zone]) => ({
  name, 
  height, 
  weight, 
  zone
}))

console.log(stats)
Run Code Online (Sandbox Code Playgroud)

编辑基于GAS上的脚本。这是相同的方法,但es5。

var data = [['Luke Skywalker', 123, 112, 'B'], ['Jawa', 12, 8, 'B'], ['Hutt', 200, 999, 'C']];

var stats = data.map(function(dataArray) {
  return {
    name: dataArray[0], 
    height: dataArray[1], 
    weight: dataArray[2], 
    zone: dataArray[3]
  }
})

console.log(stats)
Run Code Online (Sandbox Code Playgroud)

  • 这种方法不会通过采用“属性”来使用动态方法。 (2认同)