我有这个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')。我想我需要首先用所有可能组合的空值填充数组,然后输入值。
谢谢..
答案 0 :(得分:2)
根据Fabricio的评论,以下是如何完成类似的事情:
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];
}
请注意,这将返回一个对象或散列映射,而不是严格的数组,但数据更有条理,如果您愿意,可以很容易地将其转换为数组。 Here是演示(检查您的控制台)。
添加此代码:
var count=0;
for(var key in result){
result[count]=[];
result[count][0]=key;
result[count][1]=result[key].x||null;
result[count][2]=result[key].y||null;
result[count][3]=result[key].z||null;
count++;
}
您的结果对象现在模拟结构,原始数组数组和建议的键值对。您可以在此处查看结果:http://jsfiddle.net/9Lakw/3/
以下是result
的样子:
{
"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
]
}
答案 1 :(得分:1)
以下是我如何使用数组和问题中的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]]
答案 2 :(得分:0)
你确定你想要的格式吗?获得似乎更明智:
{
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;
})