Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缺少对象和值的Javascript填充数组_Javascript_Arrays_Object - Fatal编程技术网

缺少对象和值的Javascript填充数组

缺少对象和值的Javascript填充数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个类似于bellow的数组,每个索引包含不同的对象集,我想创建一个统一的数据,其中每个索引中缺少的对象的值为:0 var d = [ [ {axis:"Email",value:59,id:1}, {axis:"Social Networks",value:56,id:2}, ], [ {axis:"Sending Money",value:18,id:6

我有一个类似于bellow的数组,每个索引包含不同的对象集,我想创建一个统一的数据,其中每个索引中缺少的对象的值为:0

var d = [
          [
            {axis:"Email",value:59,id:1},
            {axis:"Social Networks",value:56,id:2},

          ],
          [

            {axis:"Sending Money",value:18,id:6},
            {axis:"Other",value:15,id:7},

          ]
        ];
如何使用上面的数组获得像bellow这样的数组

var d = [
          [
            {axis:"Email",value:59,id:1},
            {axis:"Social Networks",value:56,id:2},
            {axis:"Sending Money",value:0,id:6},
            {axis:"Other",value:0,id:7},

          ],
          [
            {axis:"Email",value:0,id:1},
            {axis:"Social Networks",value:0,id:2},
            {axis:"Sending Money",value:18,id:6},
            {axis:"Other",value:15,id:7},

          ]
        ];

有两个功能:

getAllEntries,查找所有对象并将其存储到变量accEntries中。然后使用accEntries搜索d的子数组中的所有事件。整个过程是在checkArray中完成的

checkArray用于获取d中所有已找到和未找到的条目。这两个数组(已找到和未找到)随后用于构建新的子数组,该子数组包含具有特定值的已找到项和/或值为0的未找到项

希望这有助于:

var d=[
[
{
axis:“电子邮件”,
价值:59,
身份证号码:1
},
{
轴心:社交网络,
价值:56,
身份证号码:2
},
],
[
{
轴心国:"寄钱",,
价值:18,
身份证号码:6
},
{
轴:'其他',
价值:15,
身份证号码:7
},
]
];
函数getAllEntries(数组){
var Uniquentries=[];
array.forEach(函数(子数组){
子数组forEach(函数(obj){
if(uniquentries.indexOf(obj)=-1)uniquentries.push(obj);
});
});
返回Uniquentries;
}
函数checkArray(数组,acceptedEntries){
var结果=[];
array.forEach(函数(子数组){
var子结果=[];
var foundEntries=[];
子数组forEach(函数(obj){
if(foundEntries.indexOf(对象轴)=-1)foundEntries.push(对象轴);
});
var notFound=acceptedEntries.filter(函数(已接受){
返回foundEntries.indexOf(accepted.axis)=-1;
});
foundEntries.forEach(函数(已找到){
子数组forEach(函数(obj){
如果(obj.axis==找到)子结果推送(obj);
});
});
forEach(函数(notFound,索引){
subResult.push({
axis:notfound.axis,
值:0,
id:notfound.id
});
});
结果。推送(子结果);
});
返回结果;
}
var accEntries=getAllEntries(d);
var结果=检查数组(d,accEntries);

控制台日志(结果)您可以在数组上循环以查找所有唯一对象,然后再次循环以推送与唯一键的对象数组相比不存在的值

您可以使用ES6语法查找是否存在具有属性的对象,如
uniKeys.findIndex(obj=>obj.axis==val.axis)
和使用零值进行推送的方法使用扩展语法,如
d[index].push({…val,值:0})

下面是实现的代码段

var d=[
[
{axis:“电子邮件”,值:59,id:1},
{axis:“社交网络”,值:56,id:2},
],
[
{axis:“汇款”,价值:18,id:6},
{轴:“其他”,值:15,id:7},
{axis:“社交网络”,价值:89,id:2},
]
];
var uniKeys=[];
$。每个(d,功能(索引,项目){
$。每个(项目、功能(idx、val){
const pos=uniKeys.findIndex(obj=>obj.axis===val.axis);
如果(位置==-1){
单键按键(val);
}
})
})
$。每个(d,功能(索引,项目){
var-temp=[];
$.each(单键,函数(idx,val){
const pos=item.findIndex(obj=>obj.axis===val.axis);
如果(位置==-1){
d[index].push({…val,值:0});
}
})
})
控制台日志(d);

一个简短的
浅拷贝
函数(
Object.assign
在IE中不可用)或者少于10行新代码如何

var d = [
      [
        {axis:"Email",value:59,id:1},
        {axis:"Social Networks",value:56,id:2}
      ],
      [
        {axis:"Sending Money",value:18,id:6},
        {axis:"Other",value:15,id:7}
      ]
    ];

var newD_0 = [shallowCopy(d[0][0]), shallowCopy(d[0][1]), shallowCopy(d[1][0]), shallowCopy(d[1][1])];
var newD_1 = [shallowCopy(d[0][0]), shallowCopy(d[0][1]), shallowCopy(d[1][0]), shallowCopy(d[1][1])];

newD_0[2].id = 0; 
newD_0[3].id = 0;
newD_1[0].id = 0;
newD_1[1].id = 0;

d = [newD_0, newD_1];

function shallowCopy(obj) {
    var copy = {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            copy[key] = obj[key];   
        }
    }
    return copy;
}

console.log(JSON.stringify(d));
结果:

[  
   [  
      {  
         "axis":"Email",
         "value":59,
         "id":1
      },
      {  
         "axis":"Social Networks",
         "value":56,
         "id":2
      },
      {  
         "axis":"Sending Money",
         "value":18,
         "id":0
      },
      {  
         "axis":"Other",
         "value":15,
         "id":0
      }
   ],
   [  
      {  
         "axis":"Email",
         "value":59,
         "id":0
      },
      {  
         "axis":"Social Networks",
         "value":56,
         "id":0
      },
      {  
         "axis":"Sending Money",
         "value":18,
         "id":6
      },
      {  
         "axis":"Other",
         "value":15,
         "id":7
      }
   ]
]   

你的问题是什么?通过迭代。有可能做到这一点吗?如果是,如何操作?是否有操作数组的函数?@matrixwebtech原生JS方法就是您所需要的。此外,在SO上,人们通常不喜欢回答提问者没有表现出自己解决问题的兴趣的问题。数组中的顺序重要吗?为什么
电子邮件
是第一个而不是
汇款
?名称列表是固定的还是要根据现有数据进行计算?如果您可以提供列表,例如,
var headers=['Email'、'Social Networks'、'Sending Money'、'Other']
,那么即使按照所需的顺序,也很容易生成输出。如果不能,那么仍然很容易生成缺少的条目,但顺序不能保证。至少,当您按“运行代码片段”时,您可以查看所需的数组。描述仍在继续请不要误会,但第二个子数组中的社交网络是否正确?“或者我的眼睛上有西红柿吗?”布劳哈利,我想我的意思是对的。为了演示,我在原始数组中添加了一个额外的对象,只是为了说明两个数组中都存在该对象时的情况,请先查看我的输入