Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何透视javascript数组_Javascript_Arrays - Fatal编程技术网

如何透视javascript数组

如何透视javascript数组,javascript,arrays,Javascript,Arrays,我有一个javascript数组: [['a', 'x', 1], ['a', 'y', 2], ['b', 'x', 3], ['b', 'z', 4], ['c', 'y', 5], ['c', 'z', 6]] 如何将它旋转到下面这样的位置,使上面的第二列('x','y','z')穿过 [['a', 1, 2, null], ['b', 3, null, 4], ['c', null, 5, 6]] 编辑: 对不起,我不清楚。到目前为止,答案似乎是指x、y、z的静态长度/

我有一个javascript数组:

[['a', 'x', 1],
 ['a', 'y', 2],
 ['b', 'x', 3],
 ['b', 'z', 4],
 ['c', 'y', 5],
 ['c', 'z', 6]]
如何将它旋转到下面这样的位置,使上面的第二列('x','y','z')穿过

[['a', 1, 2, null],
 ['b', 3, null, 4],
 ['c', null, 5, 6]]
编辑: 对不起,我不清楚。到目前为止,答案似乎是指x、y、z的静态长度/值。数组将是动态的,并且可以在第二列中包含任何内容(例如,“t”、“u”、“v”、“w”而不是“x”、“y”、“z”)。我想我需要首先为所有可能的组合用null填充数组,然后推入值


谢谢。

根据法布里西奥的评论,以下是您可以完成类似任务的方法:

var result = {};
for(var i=0;i< basearray.length;i++){
    if(!result[basearray[i][0]]){
        result[basearray[i][0]]={};
    }
    result[basearray[i][0]][basearray[i][1]]=basearray[i][2];
}
现在,结果对象将模拟这两种结构、原始数组数组和建议的键值对。您可以在此处看到结果:

下面是
结果的样子:

{
   "a":{
      "x":1,
      "y":2
   },
   "b":{
      "x":3,
      "z":4
   },
   "c":{
      "y":5,
      "z":6
   },
   "0":[
      "a",
      1,
      2,
      null
   ],
   "1":[
      "b",
      3,
      null,
      4
   ],
   "2":[
      "c",
      null,
      5,
      6
   ]
}

下面是我如何使用问题中的数组和
null
填充符。这假设给定点的坐标总是连续出现

var arr = [['a', 'x', 1],
 ['a', 'y', 2],
 ['b', 'x', 3],
 ['b', 'z', 4],
 ['c', 'y', 5],
 ['c', 'z', 6]];

var aux = {
        x: 1,
        y: 2,
        z: 3
    },
    output = [],
    lastItem,
    currItem;

for (var i = 0; i < arr.length; i++) {
    currItem = arr[i];
    if (currItem[0] !== lastItem) {
        lastItem = currItem[0];
        output.push([lastItem, null, null, null]);
    }
    output[output.length-1][aux[currItem[1]]] = currItem[2];
}
console.log(output); //[["a", 1, 2, null], ["b", 3, null, 4], ["c", null, 5, 6]]
var arr=[[a',x',1],
[a',y',2],
[b',x',3],
[b','z',4],
[c',y',5],
['c','z',6]];
变量aux={
x:1,
y:2,
z:3
},
输出=[],
最后一项,
货币项目;
对于(变量i=0;i

你确定这是你想要的格式吗?似乎更明智的做法是:

{
    a: {x: 1, y: 2},
    b: {x: 3, z: 4},
    c: {y: 5, z: 6}
}
您可以从以下网站获得:

var results = {};
data.forEach(function(el) {
    var name = el[0];
    var prop = el[1];
    var value = el[2];
    results[name] = results[name] || {};
    results[name][prop] = value;
})

我为缺乏数学敏锐性而道歉,但你能解释一下“旋转”是如何工作的吗?我无法识别模式参考点,我猜是xyz坐标。@Asad:pivot就像一个交叉表,可以将一列转换成一行@我明白了。我的尝试对你有用吗?如果(currItem[0]!==lastItem)
可能会中断,我可以使用
数组使其工作。indexOf
/
过滤器
搜索,但如果我正确地记住了我父亲的旋转,这些应该是有序的。
var results = {};
data.forEach(function(el) {
    var name = el[0];
    var prop = el[1];
    var value = el[2];
    results[name] = results[name] || {};
    results[name][prop] = value;
})