简体   繁体   中英

JavaScript - 2D Arrays / Objects

I am trying to create array and/ or objects to hold values for graphing. The data comes in as JSON. Each Object has an asset code a date and two measurements i am interested in. (measurement 3 with be the net of the two) I am attempting to filter by both an asset code and then the date the data was captured. I would like to compile this into a single object that I could loop through and extract data for each asset by date. My attempt bellow was to create an array of arrays but have run into some undefined variable issues. Is there a more concise way to achieve this?

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); 
    }
}

A representation of JSON is as follows:

[
    { 
        "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"
   }
]

I think this is at least part of what you want.

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;
}, {});

This function turns your JSON (after fixing the curly braces) in to this.

{
  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
}]
}

I don't really understand what your code is trying to accomplish, but if all you want to do is loop through the objects in your JSON array, then this is much simpler:

<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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM