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