JavaScript转换数组2D中的对象数组

时间:2017-12-02 19:52:37

标签: javascript arrays json object request-promise

我需要以下JS结构(来自请求 - 承诺查询的结果)

[ { idfactura: 2,
    idcuenta: 1,
    nombre: 'Nick',
    periodo: 'Per1                                          ',
    formapago: 'Tarj   ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 0,
    fecha: '24/11/2017 02:38' },
  { idfactura: 3,
    idcuenta: 1,
    nombre: 'Adm',
    periodo: 'Per1                                          ',
    formapago: 'Efec  ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 10,
    fecha: '25/11/2017 23:45' } ]

到下面的确切结构(在xlsx中导出):

[[2, 1, 'Nick', 'Per1', 'Tarj', 1, 7000, 0, '24/11/2017 02:38'],
 [3, 1, 'Adm', 'Per1', 'Efec', 1, 7000, 10, '25/11/2017 23:45']]

我尝试使用_方法,值,JSON.stringify作为Stackoverflow中的其他帖子,但我无法获得我的确切输出结构。

示例代码:

results = [ { idfactura: 2,
    idcuenta: 1,
    nombre: 'Nick',
    periodo: 'Per1                                          ',
    formapago: 'Tarj   ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 0,
    fecha: '24/11/2017 02:38' },
  { idfactura: 3,
    idcuenta: 1,
    nombre: 'Adm',
    periodo: 'Per1                                          ',
    formapago: 'Efec  ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 10,
    fecha: '25/11/2017 23:45' } ]

var arr = Object.key(results).map(function(key){
    return [results[key]];
});

2 个答案:

答案 0 :(得分:1)

您需要从每个对象获取值。虽然有很多种方法,但有一种方法是使用Object.keys获取密钥并使用map函数分别映射值。

ES7中,您只需使用Object.values

获取对象的值即可

此外,由于您的数组似乎有不必要的空格,您需要通过修剪空格来相应地映射它们。

results = [ { idfactura: 2,
    idcuenta: 1,
    nombre: 'Nick',
    periodo: 'Per1                                          ',
    formapago: 'Tarj   ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 0,
    fecha: '24/11/2017 02:38' },
  { idfactura: 3,
    idcuenta: 1,
    nombre: 'Adm',
    periodo: 'Per1                                          ',
    formapago: 'Efec  ',
    cantidadpersonas: 1,
    subtotal: 7000,
    porcentajedescuento: 10,
    fecha: '25/11/2017 23:45' } ]
    
const mappedResults = 
  results.map(result => 
    Object.keys(result).map(key => 
      typeof(result[key]) === "string" ? result[key].trim() : result[key]
    )
  )
console.log(mappedResults)

const mappedResultsES7 = 
  results.map(result =>
     Object.values(result).map(value =>
       typeof(value) === "string" ? value.trim() : value
     )
  )
 
console.log(mappedResultsES7)

答案 1 :(得分:0)

按照您想要的顺序创建一个键数组,然后使用2个嵌套的Array#map调用来迭代数组,然后迭代键并提取数据:



var oredredKeys = ['idfactura', 'idcuenta', 'nombre', 'periodo', 'formapago', 'cantidadpersonas', 'subtotal', 'porcentajedescuento', 'fecha'];

var data = [{"idfactura":2,"idcuenta":1,"nombre":"Nick","periodo":"Per1","formapago":"Tarj   ","cantidadpersonas":1,"subtotal":7000,"porcentajedescuento":0,"fecha":"24/11/2017 02:38"},{"idfactura":3,"idcuenta":1,"nombre":"Adm","periodo":"Per1","formapago":"Efec  ","cantidadpersonas":1,"subtotal":7000,"porcentajedescuento":10,"fecha":"25/11/2017 23:45"}];

var result = data.map(function(o) {
  return oredredKeys.map(function(key) {
    return o[key];
  });
});

console.log(result);