【问题标题】:Creating Javascript object using loop with conditions使用带条件的循环创建 Javascript 对象
【发布时间】:2015-05-04 06:10:53
【问题描述】:

我有一个如下所示的 sql 表:

+------+------------+---------+---------------------+-----------+
| SrNo | BidderName | BidAmt  |       BidDate       | BidTicks  |
+------+------------+---------+---------------------+-----------+
|    1 | ARBAAZ     | 500.00  | Apr 30 2015 10:27AM | 348854000 |
|    2 | SHEKHAR    | 600.00  | Apr 30 2015 10:28AM | 348845000 |
|    3 | SHEKHAR    | 800.00  | Apr 30 2015 10:28AM | 348838000 |
+------+------------+---------+---------------------+-----------+

我以 JSON 格式将其发送到我的客户端。

我可以通过以下方式获取值:

var data;

Table.forEach(function (field) {
    var name = field.BidderName;
    var amount = field.BidAmt;
    data = "";
});

我正在尝试从Table 为我的浮点图创建一个看起来像这样的对象:

var dataset = [
    {
        label: "ARBAAZ",
        data: [[348854000, 500.00]],//created from [bidticks,bidamt]
        color: "#FF0000",
        points: { fillColor: "#FF0000", show: true },
        lines: { show: true }
    },
    {
        label: "SHEKHAR",
        data: [[348845000, 600.00], [48838000, 800.00]],
        color: "#0062E3",
        points: { fillColor: "#0062E3", show: true },
        lines: { show: true }
    }
];

有什么想法,我该如何实现?

【问题讨论】:

  • 您可以访问这些链接Link1Link2
  • 描述你的最终报告的结构...
  • 在我看来,您需要调整结果。为此,请获取不同投标人名称的列表,然后遍历不同的列表,并在名称与原始数据集中的名称匹配的位置将值选择到数据中。
  • 或者更好的解决方案是......不要在客户端这样做......
  • @deostroll 这是最终的结构。我的意思是 Flot 图需要传递给它的 dataset 变量,它需要采用这种格式。我已经显示了后端表。我只是必须以某种方式将其转换为所需的dataset 格式

标签: javascript jquery asp.net json flot


【解决方案1】:

假设您的 json 数据在 var 'data' 中, 你可以用filter函数循环遍历,

  var seen = {};
    data = data.filter(function(entry) {
        var previous;

        // Have we seen this label before?
        if (seen.hasOwnProperty(entry.label)) {
            // Yes, grab it and add this data to it
            previous = seen[entry.label];
            var data = [entry.BidTicks, entry.BidAmt] ;
            previous.data.push(data);

            // Don't keep this entry, we've merged it into the previous one
            return false;
        }    

        // entry.data probably isn't an array; make it one for consistency

        entry.data = [];
        var data = [entry.BidTicks, entry.BidAmt] ;
        entry.data.push(data);

        //delete the attributes which are not required in final output
        delete entry.BidTicks;
        delete entry.BidAmt;

        // Remember that we've seen it
        seen[entry.label] = entry;

        // Keep this one, we'll merge any others that match into it
        return true;
    });

工作小提琴在这里--> fiddle to filter the array of objects

关于你的额外属性“颜色”、“线条”等,我相信你现在可以将它们带入最终输出。

【讨论】:

  • 我如何将它分成不同的投标人的块?如您所见,示例中的数据集有 2 个块,Arbaaz 和 Shekhar 各一个
  • @Arbaaz 我编辑了答案以反映您需要的确切更改。如果您觉得有用,请采纳答案
【解决方案2】:

我不知道您在 json 对象中有什么确切的数据结构。 但是,我认为你可以这样做

   $.each(data, function(index, statistic) {
        if (statistic.BidderName == 'Team Red') {
            teamRed.push([statistic.BidAmt, statistic.timeStamp]);
        } else {
            teamBlue.push([statistic.BidAmt, statistic.timeStamp]);
        }
    });

现在您可以在 dataset 对象中使用 teamRed 和 teamBlue。

我假设您确实有这个 BidderName,它将区分该行属于蓝队还是红队。

【讨论】:

  • Team Read 实际上是 Table 中的 Arbaaz 和 Shekhar。我应该纠正这个例子。
  • 很抱歉我应该更正这个例子。红队和蓝队只不过是从 Table 返回的名称。阿尔巴兹和谢卡尔。我已经更新了这个问题。我只有数据集结构。
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2012-12-27
  • 2020-09-28
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多