[英]JavaScript - 2D Arrays / Objects
我正在尝试创建数组和/或对象来保存图形值。 数据以JSON形式出现。 每个对象都有一个资产代码和一个日期,以及我感兴趣的两个度量。(度量3为两者的净值)我试图同时按资产代码和捕获数据的日期进行过滤。 我想将其编译为单个对象,以便循环浏览并按日期提取每个资产的数据。 我下面的尝试是创建一个数组数组,但是遇到了一些未定义的变量问题。 有没有更简洁的方法来实现这一目标?
var response = []; //to store global variables
response.handle = function handle (resp) {
response.measurment1 = {};
response.measurmentt2 = {};
response.measurement3 = {};
var dateArray = [];
var assetCodeArray = [];
for(object in resp) {
if (extend.contains(dateArray,resp[object].date == false){ // extend.contains is a function that checks if an obj is in an array
dateArray.push(resp[object].date;
}
if (extend.contains(dateArray,resp[object].AssetCode == false){ // extend.contains is a function that checks if an obj is in an array
assetCodeArray.push(resp[object].date;
}
}
for (var code in assetCodeArray) {
response.injObj[assetCodeArray[code]] = [];
response.WthObj[assetCodeArray[code]] = [];
response.netObj[assetCodeArray[code]] = [];
var filteredRespAC = resp.filter(function(y) {
return y.AssetCode == assetCodeArray[code];
});
var AssetCodeInj = 0;
var AssetCodeWth = 0;
var AssetCodeNet = 0;
for (var obj in filteredRespAC) {
for (date in dateArray) {
var filterACDate = filteredRespAC.filter(function(z) {
return z.date == dateArray[date];
});
var volInj = filterACDate[date]["Measurement1"];
var volWth = filterACDate[date]["measurment2"];
var volNet = volInj + volWth;
response.injObj[assetCodeArray[code]].push(volInj);
response.WthObj[assetCodeArray[code]].push(volWth);
response.netObj[assetCodeArray[code]].push(volNet);
}
}
JSON的表示如下:
[
{
"ID" : 12345,
"AssetCode" : "AC1",
"Measure1" : 12345,
"Measure2" : -1234,
"Date" : "2016-01-14T00:00:00"
},{
"ID" : 12346,
"AssetCode" : "AC1",
"Measure1" : 6789,
"Measure2" : -678,
"Date" : "2016-01-14T00:00:00"
},{
"ID" : 12347,
"AssetCode" : "AC2",
"Measure1" : 12345,
"Measure2" : -1234,
"Date" : "2016-01-14T00:00:00"
},{
"ID" : 12348,
"AssetCode" : "AC1",
"Measure1" : 12345,
"Measure2" : -1234,
"Date" : "2016-01-13T00:00:00"
}
]
我认为这至少是您想要的一部分。
data.reduce(function (last, current, index, array) {
if (last[current.AssetCode] == undefined) {
console.log(last);
last[current.AssetCode] = array.filter(function (value) {
return current.AssetCode === value.AssetCode;
});
return last;
}
return last;
}, {});
此函数将您的JSON(在固定花括号后)转换为此。
{
AC1: [{
AssetCode: "AC1",
Date: "2016-01-14T00:00:00",
ID: 12345,
Measure1: 12345,
Measure2: -1234
}, {
AssetCode: "AC1",
Date: "2016-01-14T00:00:00",
ID: 12346,
Measure1: 6789,
Measure2: -678
}, {
AssetCode: "AC1",
Date: "2016-01-13T00:00:00",
ID: 12348,
Measure1: 12345,
Measure2: -1234
}],
AC2: [{
AssetCode: "AC2",
Date: "2016-01-14T00:00:00",
ID: 12347,
Measure1: 12345,
Measure2: -1234
}]
}
我不太了解您的代码试图完成什么,但是如果您要做的就是循环遍历JSON数组中的对象,那么这要简单得多:
<script>
var json = '[ { "ID" : 12345, "AssetCode" : "AC1", "Measure1" : 12345, "Measure2" : -1234, "Date" :"2016-01-14T00:00:00" }, { "ID" : 12346, "AssetCode" : "AC1", "Measure1" : 6789, "Measure2" : -678, "Date" :"2016-01-14T00:00:00" }, { "ID" : 12347, "AssetCode" : "AC2", "Measure1" : 12345, "Measure2" : -1234, "Date" :"2016-01-14T00:00:00" }, { "ID" : 12348, "AssetCode" : "AC1", "Measure1" : 12345, "Measure2" : -1234, "Date" :"2016-01-13T00:00:00" } ]';
var response = JSON.parse(json);
for(var i = 0, j = response.length; i < j; i++) {
var object = response[i];
console.log(object);
var measure3 = object.Measure1 + object.Measure2;
console.log(measure3);
}
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.