[英]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.