匹配javascript对象长度

匹配javascript对象长度,javascript,Javascript,我有以下javascript对象: 输入 data=[]; data[0]=[{"value":29},{"value":44}] data[1]=[{"value":16}] data[2]=[{"value":13},{"value":11},{"value":1}] data[3]=[{"value":13},{"value":11}] data[0]=[{"value":29},{"value":44},{"value":0},{"value":0},{"value":0},{"val

我有以下javascript对象:

输入

data=[];
data[0]=[{"value":29},{"value":44}]
data[1]=[{"value":16}]
data[2]=[{"value":13},{"value":11},{"value":1}]
data[3]=[{"value":13},{"value":11}]
data[0]=[{"value":29},{"value":44},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[1]=[{"value":0},{"value":0},{"value":16},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[2]=[{"value":0},{"value":0},{"value":0},{"value":13},{"value":11},{"value":1},{"value":0},{"value":0}]
data[3]=[{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}{"value":13},{"value":11}]
通过添加
{value:0}
来匹配javascript对象长度的所需输出背后的逻辑,以实现所需的输出,我使用了
unshift
push
操作。这是我想要的输出的图示

数据1 0 0
0数据2 0 0
0 0数据3 0
0 0数据4

所需输出

data=[];
data[0]=[{"value":29},{"value":44}]
data[1]=[{"value":16}]
data[2]=[{"value":13},{"value":11},{"value":1}]
data[3]=[{"value":13},{"value":11}]
data[0]=[{"value":29},{"value":44},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[1]=[{"value":0},{"value":0},{"value":16},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[2]=[{"value":0},{"value":0},{"value":0},{"value":13},{"value":11},{"value":1},{"value":0},{"value":0}]
data[3]=[{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}{"value":13},{"value":11}]
电流输出:

如果查看
数据[2]
,结果是意外的。我无法处理这个问题

data[0]=[{"value":29},{"value":44},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[1]=[{"value":0},{"value":0},{"value":16},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[2]=[{"value":13},{"value":11},{"value":1},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}]
data[3]=[{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}{"value":13},{"value":11}]
这里是

data=[];
data[0]=[{"value":29},{"value":44}]
data[1]=[{"value":16}]
data[2]=[{"value":13},{"value":11},{"value":1}]
data[3]=[{"value":13},{"value":11}]
debugger;
console.log(data);
alllength=0
for (i=0;i<data.length;i++)
{
    m= Object.keys(data[i]).length;
    alllength=alllength+m;
}

console.log(alllength);

for (i=0;i<data.length;i++)
{
   if(i==0)
   {
       m=Object.keys(data[i]).length;
       for(j=0;j<alllength-m;j++)
       {
           data[i].splice(m+j+1, 0, {"value":0});
       }
   }

   else if(i==data.length-1)
   {
       n=Object.keys(data[i]).length;
       for(j=0;j<alllength-n;j++)
       {
           data[i].unshift({"value":0});
       }

   }

   else
   {
     self.n="";
     k=Object.keys(data[i-1]).length;
     for (n=0;n<k;n++)
     {
         if(data[i-1][n].value==0)
         {
             console.log(n);
             for(j=0;j<n;j++)
             {
                data[i].unshift({"value":0});
             }

              m=Object.keys(data[i]).length;
              for(j=0;j<alllength-m;j++)
              {
                 data[i].splice(m+j+1, 0, {"value":0});
              }
             break;
        }
    }
  }
}
console.log(data)
data=[];
数据[0]=[{“值”:29},{“值”:44}]
数据[1]=[{“值”:16}]
数据[2]=[{“值”:13},{“值”:11},{“值”:1}]
数据[3]=[{“值”:13},{“值”:11}]
调试器;
控制台日志(数据);
alllength=0
对于(i=0;i
data=[];
数据[0]=[{“值”:29},{“值”:44}]
数据[1]=[{“值”:16}]
数据[2]=[{“值”:13},{“值”:11},{“值”:1}]
数据[3]=[{“值”:13},{“值”:11}]
调试器;
控制台日志(数据);
alllength=0

对于(i=0;i好的,这里有几件事

1) 您将通过调用数组上的Object.keys来增加算法的时间复杂度。Data[i]是一个对象数组,因此调用Data[i].length而不是Object.keys(Data[i])可以很好地工作.length.array单独跟踪长度,其中调用Object.keys将在后台执行多个操作,这将降低算法的速度

2) 您的问题在于:在第43行,您将n设置为零

for (n=0;n<k;n++)
当n==0时,这将是真的,因为前一个数组中的前几个对象的值等于0

接下来,您将遍历并添加必要的0值对象,以使用此代码创建所需的结构

for(j=0;j<n;j++)
         {
            data[i].unshift({"value":0});
         }

for(j=0;j使用
reduce
map
,这可能需要使用外部库来处理

var数据=[];
数据[0]=[{“值”:29},{“值”:44}]
数据[1]=[{“值”:16}]
数据[2]=[{“值”:13},{“值”:11},{“值”:1}]
数据[3]=[{“值”:13},{“值”:11}]
var totalLength=data.reduce(函数(长度,项){
返回长度+item.length;
}, 0);
var-key=0;
data=data.map(函数(项){
var out=[];
对于(var i=0;iconsole.log(data);
您现有的代码是什么?我也在这里添加了代码。t是超级代码,我已标记为答案。我想知道如何添加其他对象。例如,
data[0]=[{“value”:29,“category”:“cat1”},{“value”:44,“category”:“cat1”},{“value”:0,“category”:“cat1”},…]
,对于
数据[1]
-->
类别:“cat2”,等等。
向对象添加更多数据应该可以,但是如果您的意思是将它们作为映射的一部分添加,那么我将跟踪索引
data.map(函数(项,索引){/*…*/})
,然后将其添加到项目
item.cat=index
;然后再将其推送到
out
数组中。