javascript如何使对象内联
我有一些嵌套不同的对象。示例:javascript如何使对象内联,javascript,matrix,Javascript,Matrix,我有一些嵌套不同的对象。示例: Object1 { data: {somePage1.php: {0: {function:'getPrice', item:'0568000085', line: 6}, 1:
Object1
{
data: {somePage1.php:
{0:
{function:'getPrice',
item:'0568000085',
line: 6},
1:
{function:'getCurrency',
item:'066000089'
line: 9}
},
somePage2.php:...
}
}
{row1:{key1:somePage1.php, key2:0, function:'getPrice', item:'0568000085', line:6}
row2:{key1:somePage1.php, key2:1, function:'getCurrency', item:'066000089', line:9}
row3:{key1:somePage2.php, key2:0, function: ... }
row4:...
}
Object2
data: {EUR:{currency:45.0417}USD:{currency:33.0346}}
{
row1:{key1:EUR, currency:45.0417}
row2:{key1:USD, currency:33.0346}
}
等等。我需要的是函数,它可以使任何对象内联
希望的结果是:
Object1
{
data: {somePage1.php:
{0:
{function:'getPrice',
item:'0568000085',
line: 6},
1:
{function:'getCurrency',
item:'066000089'
line: 9}
},
somePage2.php:...
}
}
{row1:{key1:somePage1.php, key2:0, function:'getPrice', item:'0568000085', line:6}
row2:{key1:somePage1.php, key2:1, function:'getCurrency', item:'066000089', line:9}
row3:{key1:somePage2.php, key2:0, function: ... }
row4:...
}
Object2
data: {EUR:{currency:45.0417}USD:{currency:33.0346}}
{
row1:{key1:EUR, currency:45.0417}
row2:{key1:USD, currency:33.0346}
}
很明显,我需要递归,但我无法理解整个函数,比如:
this.row = 0;
this.inline = function(d){
var that = this;
var data = d||that.data;//data have been append to this object onload
$.each(data, function(attr, value){
$.each(data[attr], function(att, val){
if(typeof(val) === 'object' || typeof(val) === 'array'){
that.inline(data[attr][att]);
}else{
$.each(data, function(){
that.row++;
});
console.log(value);
}
});
});
console.log('======> '+that.row);
},
这将获取对象数据的每个(本地)属性,将其作为行中的rowN属性,并将旧属性名称作为键属性,我不建议像您的示例中那样递增键属性
var i = 0, rows = {}, data = {a: {t: 1}, b: {g: 2}, c: { z: 3}};
$.each(data,
function (prop, obj) {
rows['row' + i++] = $.extend({ key: prop}, obj);
}
);
顺便说一句,双嵌套循环不是递归。还不清楚您是否需要递归,许多解决方案都可以通过递归和带循环的命令执行来解决。上面的例子不使用递归,而是使用一个命令循环
这使用递归并假设json是任意嵌套的,并将key1、key2等赋值给值为非null对象的键
编辑:修复了使第一个键使用rowX(对不起,所有的单字母变量名)您想做什么样的函数?将n级嵌套对象转换为2级的函数,如表格为什么0被视为键2而函数不是键3?这是因为“函数”,“item”和“line”位于原始对象的最后一级,我需要保存它们(请参见问题的顶部)。此函数的任务是线性化对象,无论嵌套级别如何。您的解决方案适用于2级嵌套对象,但如果数据[obj]包含其他对象,则此函数仅将嵌套减少1级,这是使用递归的主要原因。解决方案中的键2、键3和下一个键包含一个对象。我需要得到的行数等于最后一级非对象值的总和。我想我必须使用双循环来检查更深层次的原子值,如果是这样的话,返回到更高层并创建行。哎呀,我设置了错误的东西,应该将I设置为r['key'+l],而不是c。更新的答案。非常感谢,这很有效‘‘‘’))很抱歉,我不能投票支持你的答案,因为我没有足够的声誉。