簡體   English   中英

JavaScript-2D數組/對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM