Javascript 将对象转换为多维数组
我基本上想反过来做: 假设我有一个这样的物体:Javascript 将对象转换为多维数组,javascript,arrays,json,object,multidimensional-array,Javascript,Arrays,Json,Object,Multidimensional Array,我基本上想反过来做: 假设我有一个这样的物体: { "6": {"10":{'id':0,'name':'player1'}}, "7": {"5":{'id':1,'name':'player2'}} } [ null, null, null, null, null, null, [null, null, null, null, null, null, null, null, null, null, {'id':0,
{
"6": {"10":{'id':0,'name':'player1'}},
"7": {"5":{'id':1,'name':'player2'}}
}
[
null,
null,
null,
null,
null,
null,
[null, null, null, null, null, null, null, null, null, null, {'id':0,'name':'player1'}],
[null, null, null, null, null, {'id':1,'name':'player2'}]
]
如何将其转换为如下合法数组:
{
"6": {"10":{'id':0,'name':'player1'}},
"7": {"5":{'id':1,'name':'player2'}}
}
[
null,
null,
null,
null,
null,
null,
[null, null, null, null, null, null, null, null, null, null, {'id':0,'name':'player1'}],
[null, null, null, null, null, {'id':1,'name':'player2'}]
]
这是我成功地用另一种方式转换它的代码:
function populateFromArray(array) {
var output = {};
array.forEach(function(item, index) {
if (!item) return;
if (Array.isArray(item)) {
output[index] = populateFromArray(item);
} else {
output[index] = item;
}
});
return output;
}
console.log(populateFromArray(input));
var obj={
“6”:{“10”:{'id':0,'name':'player1'},
“7”:{“5”:{'id':1,'name':'player2'}
};
函数populateArray(obj){
var范围=0,
arr=[];
对于(obj中的var指数){
range=Math.max(parseInt(索引),range);
}
对于(var i=0;i函数objectToArray(obj){
var len=Math.max.apply(null,Object.keys(obj));
if(len!==len)返回obj;//检查是否为NaN
var输出=[];
对于(var i=0;i,基于您的,假设源代码是json,您还可以在解析时使用REVOVE函数直接转换数据
var json='{“6”:{“10”:{“id”:0,“name”:“player1”},7”:{“5”:{“id”:1,“name”:“player2”}};
函数恢复器(键,val){
如果(isNaN(键)| | val.id!==未定义)
返回val;
var-res=[];
for(var p在val中)
res[p]=val[p];
返回res;
}
var gameField=JSON.parse(JSON,reviver);
console.log(gameField);
number作为属性名通常不是一个好主意。从技术上讲,它已经是一个合法的数组。obj[7][5]
返回{id:1,name:“player2”}
。我想唯一的区别是,所有未注册的数组位置都是未定义的,而不是null
。好吧,我想在不出错或不检查未定义的情况下进行循环。Atm obj[0][0]会通过一个错误,不是吗?@Forivin:是的,因为obj[0]
是未定义的
,因此它没有第一个元素。obj[0][0]
也会在新结构中引发错误