繁体   English   中英

javascript如何使对象内联

[英]javascript how to make object inline

我有一些带有不同嵌套的对象。 例:
Object1

{
    data: {somePage1.php:
                         {0: 
                             {function:'getPrice',
                             item:'0568000085',
                             line: 6},
                          1:
                             {function:'getCurrency',
                             item:'066000089'
                             line: 9}
                          },
           somePage2.php:...
      }
}

对象2

data: {EUR:{currency:45.0417}USD:{currency:33.0346}}

等等。 我需要的是函数,它将使任何对象都内联

希望得到的结果是:

Object1

{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:...
}

对象2

{
 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); 
     }
);

顺便说一句-双嵌套循环不是递归。 还不清楚您是否需要递归,可以通过递归和强制执行循环来解决许多解决方案。 上面的示例未使用递归,而是使用了命令式循环。

http://en.wikipedia.org/wiki/Recursion_(computer_science)

function convert(d) {
  var r = {}, j = 0;
  for (var i in d) {
    r['row'+(j++)] = flatten({key1:i}, d[i], 2);
  }
  return r;
}
function flatten(r, d, l) {
  for (var i in d) {
    var c = d[i];
    if (c && typeof c == 'object') {
      r['key'+l] = i;
      flatten(r, c, l+1);
    } else {
      r[i] = c;
    }
  }
  return r;
}

这使用递归,并假定json是任意嵌套的,并将key1,key2等分配给其值是非null对象的那些键。

编辑:固定为使第一个键使用rowX(对所有单字母var名称表示抱歉)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM