基于JSON对象映射填充数组

时间:2018-01-22 11:12:14

标签: javascript ecmascript-6

我有一个要求,我需要根据JSON对象的映射填充数组。 例如: 假设我有JSON对象,如下所示:

let columns = { 'name' :'value', 'id' : 1, 'age': 15}

我想创建一个具有如下所示值的数组:

var values = [1, 15, value]; // id, age, name

我能够创建数组数组,如下所示:

var data = new Array();
var output = new Array();
let columns = [
{ 'name' :'value', 'id' : 1, 'age': 15},
{ 'name' :'value1', 'id' : 2, 'age': 18}
];

for(let i=0;i< columns.length; i++) {
    for (let variable in columns[i]) {
      data.push(columns[i][variable]);
    }
    output.push(data);
    data = new Array();
  }
  
  console.log(output);

我正在努力按照我需要的顺序将值推送到数组。我尝试创建一个映射对象但到目前为止没有成功。请让我知道可能的解决方案。

修改

感谢您的解决方案,我可以用任何方式在变量中定义map函数参数和json对象。并替换它。如下所示:

let mapping {
columns : '{name, id, age}',
mapping : '[id, age, name]'
}
const result = columns.map((mapping.columns) => mapping.mapping);

3 个答案:

答案 0 :(得分:5)

您可以使用map()方法和ES6参数解构,并按照您的需要为数组添加属性。

let columns = [{ 'name' :'value', 'id' : 1, 'age': 15},{ 'name' :'value1', 'id' : 2, 'age': 18}];

const result = columns.map(({name, id, age}) => [id, age, name]);
console.log(result)

答案 1 :(得分:1)

您还可以删除内部for循环并使用列名称(或JSON字段名称)读取数据,因此它如下所示。

var data = new Array();
var output = new Array();
let columns = [
{ 'name' :'value', 'id' : 1, 'age': 15},
{ 'name' :'value1', 'id' : 2, 'age': 18}
];

for(let i=0;i< columns.length; i++) {
   data.push(columns[i]['id']);
   data.push(columns[i]['age']);
   data.push(columns[i]['name']);
    output.push(data);
    data = new Array();
  }
  
  console.log(output);

答案 2 :(得分:0)

您可以使用Object.values()获取object

中的每个值

  
var output = new Array();
let columns = [
{ 'name' :'value', 'id' : 1, 'age': 15},
{ 'name' :'value1', 'id' : 2, 'age': 18}
];
 output = columns.map(item => Object.values(item))
  
  console.log(output);