【问题标题】:Transpose JavaScript array and object转置 JavaScript 数组和对象
【发布时间】:2016-08-07 15:16:45
【问题描述】:

JavaScript 数组和对象如何转置?具体来说,我正在尝试将以下xy 数组/对象转换为新的所需x_newy_new 数组/对象。

给定

var x=['x1','x2','x3'];
var y=[
    {name:'y1',data:['x1y1','x2y1','x3y1']},
    {name:'y2',data:['x1y2','x2y2','x3y2']}
];
console.log(x,y);

想要的

var new_x=[
    {name:'x1',data:['x1y1','x1y2']},
    {name:'x2',data:['x2y1','x2y2']},
    {name:'x3',data:['x3y1','x3y2']}
];
var new_y=['y1','y2'];
console.log(new_x,new_y);

以下是我尝试过的。

var _x=[],_y=[];
for (var i = 0; i < y.length; i++) {
    _y.push(y[i].name);
    var data=[];
    for (var j = 0; j < y[i].data.length; j++) {
        data.push(y[i].data[j]);
    }
    _x.push({name:y[i].name,data:data});
}
console.log(_x,_y)

https://jsfiddle.net/fzf03c5t/

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    容易使用一些地图:

    var x = ['x1','x2','x3'];
    var y = [
      {name:'y1', data:['x1y1','x2y1','x3y1']},
      {name:'y2', data:['x1y2','x2y2','x3y2']}
    ];
    var new_x = x.map((str, i) => ({
      name: str,
      data: y.map(obj => obj.data[i])
    }));
    var new_y = y.map(obj => obj.name);
    console.log(new_x, new_y);

    如果你不想要箭头函数,那就更冗长了。

    var x = ['x1','x2','x3'];
    var y = [
      {name:'y1', data:['x1y1','x2y1','x3y1']},
      {name:'y2', data:['x1y2','x2y2','x3y2']}
    ];
    var new_x = x.map(function(str, i) {
      return {
        name: str,
        data: y.map(function(obj) {
          return obj.data[i];
        })
      };
    });
    var new_y = y.map(function(obj) {
      return obj.name;
    });
    console.log(new_x, new_y);

    或者,如果您更喜欢循环方法,

    var x = ['x1','x2','x3'];
    var y = [
      {name:'y1', data:['x1y1','x2y1','x3y1']},
      {name:'y2', data:['x1y2','x2y2','x3y2']}
    ];
    var new_x = new Array(x.length),
        new_y = new Array(y.length);
    for (var i = 0; i < x.length; i++) {
      var data = new Array(y.length);
      for (var j = 0; j < y.length; j++)
        data[j] = y[j].data[i];
      new_x[i] = {name: x[i], data: data};
    }
    for (var j = 0; j < y.length; j++)
      new_y[j] = y[j].name;
    console.log(new_x, new_y)

    【讨论】:

    • 谢谢 Oriol,我在想/希望某种地图功能会起作用,即使它们让我有点困惑。然而,看看你的解决方案,它似乎并不令人费解。
    • 您介意解释一下“箭头函数”的作用吗?
    • @user1032531 箭头函数只是使用胖箭头语法声明的匿名函数。 developer.mozilla.org/en/docs/Web/JavaScript/Guide/…
    • 它们是一行粗箭头函数,好像是y.map(obj =&gt; { return obj.data[i])},和y.map(function(obj) =&gt; { return obj.data[i])}一样,
    • 谢谢大家。我想现在我会坚持使用非箭头功能,直到我变得更好。
    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2019-10-22
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多