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。更新的答案。非常感谢,这很有效‘‘‘’))很抱歉,我不能投票支持你的答案,因为我没有足够的声誉。