Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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 - Fatal编程技术网

创建从对象属性提取数据的新javascript数组

创建从对象属性提取数据的新javascript数组,javascript,arrays,Javascript,Arrays,我需要将一个平面数组(其中相似的数据保存在单独的属性中)转换为一个数组,将每个属性中的数据字段分组在一起。希望一个例子能说明这一点 原始阵列: [{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 }, {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm0

我需要将一个平面数组(其中相似的数据保存在单独的属性中)转换为一个数组,将每个属性中的数据字段分组在一起。希望一个例子能说明这一点

原始阵列:

        [{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 },
         {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm01":5.13, "Mtm02":6.21,"Mtm03":6.64 },
         {"MtmDate":"2014-10-26", "MouldingID":"1233B", "ID":40, "Mtm01":5.68, "Mtm02":5.95,"Mtm03":6.37 },
...
]
所需输出:

    [{"Mtm": 1, values: [{"MtmDate": "2014-10-24", "ID":38, data: 5.10},
                       {"MtmDate": "2014-10-25", "ID":39, data: 5.13},
                       {"MtmDate": "2014-10-26", "ID":40, data: 5.68}]},
     {"Mtm": 2, values: [{"MtmDate": "2014-10-24", "ID":38, data: 6.63},
                       {"MtmDate": "2014-10-25", "ID":39, data: 6.21},
                       {"MtmDate": "2014-10-26", "ID":40, data: 5.95}]},
     {"Mtm": 3, values: [{"MtmDate": "2014-10-24", "ID":38, data: 5.84},
                       {"MtmDate": "2014-10-25", "ID":39, data: 6.64},
                       {"MtmDate": "2014-10-26", "ID":40, data: 6.37}]},
     ]
我知道我可以通过“手动”为每个数据字段设置对象并将其添加到新阵列中来实现这一点:

    var mtm1 = { mtm: 1, values: [] }, mtm2 = { mtm: 2, values: [] }, mtm3 = { mtm: 3, values: [] };
    var dataByPoint = [];
    dataByPoint.push(mtm1);
    dataByPoint.push(mtm2);
    dataByPoint.push(mtm3);
然后遍历原始数组,获取每个对象的数据:

$.each(d, function(index, value) {
    var details1 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm01 };
    if (details1.data) dataByPoint[0].values.push(details1);

    var details2 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm02 };
    if (details2.data) dataByPoint[1].values.push(details2);

    var details3 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm03 };
    if (details3.data) dataByPoint[2].values.push(details3); 
});

然而,事实上有十几个这样的数据属性,这种方法似乎很冗长。有没有办法通过循环数据属性来填充新数组?

使用数组的map函数

var originalArray =   [{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 },
         {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm01":5.13, "Mtm02":6.21,"Mtm03":6.64 },
         {"MtmDate":"2014-10-26", "MouldingID":"1233B", "ID":40, "Mtm01":5.68, "Mtm02":5.95,"Mtm03":6.37 },
...
]

var expectedArray = originalArray.map(function(v){
   return {mtm:v.ID, values:v}
})
var arr=[{“MtmDate”:“2014-10-24”,“moldingid”:“1233B”,“ID”:38,“Mtm01”:5.10,“Mtm02”:6.63,“Mtm03”:5.84},
{“MtmDate”:“2014-10-25”,“模制ID”:“1233B”,“ID”:39,“Mtm01”:5.13,“Mtm02”:6.21,“Mtm03”:6.64},
{“MtmDate”:“2014-10-26”,“模制ID”:“1233B”,“ID”:40,“Mtm01”:5.68,“Mtm02”:5.95,“Mtm03”:6.37}
]
var newArr=[];		
对于(变量i=0;idocument.write(JSON.stringify(newArr))
v
将是这里的一个对象OP需要一个整数MMM我看做一点更改这不会创建OP想要的数组
Mtm
应该是索引,而不是原始数组中的ID。这不起作用-所有Mtm01、02等都需要分组在一起