迭代并从JSON中获取一些索引的唯一值 [英] Iterate and get unique values from JSON for some indexes

查看:81
本文介绍了迭代并从JSON中获取一些索引的唯一值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用如下查询从PHP获取数据:

I'm getting data back from my PHP using a query like this:

SELECT objective,signal_type,signal_name FROM signals WHERE channel="Email"

数据会像这样返回:

[
    {
        "objective": "Awareness",
        "signal_type": "Efficiency",
        "signal_name": "CPM"
    },
    {
        "objective": "Awareness",
        "signal_type": "Quality",
        "signal_name": "Click-thru Rate"
    },
    {
        "objective": "Awareness",
        "signal_type": "Quality",
        "signal_name": "Frequency"
    },
    {
        "objective": "Awareness",
        "signal_type": "Quality",
        "signal_name": "Interaction Rate"
    },
    {
        "objective": "Awareness",
        "signal_type": "Quality",
        "signal_name": "Viewability"
    },
    {
        "objective": "Awareness",
        "signal_type": "Volume",
        "signal_name": "Display Time"
    },
    {
        "objective": "Awareness",
        "signal_type": "Volume",
        "signal_name": "Impression"
    },
    {
        "objective": "Awareness",
        "signal_type": "Volume",
        "signal_name": "Reach"
    },
    {
        "objective": "Conversion",
        "signal_type": "Efficiency",
        "signal_name": "Cost per Action"
    },
    {
        "objective": "Conversion",
        "signal_type": "Efficiency",
        "signal_name": "ROI/ROAS"
    },
    {
        "objective": "Conversion",
        "signal_type": "Quality",
        "signal_name": "Avg Order Value"
    },
    {
        "objective": "Conversion",
        "signal_type": "Volume",
        "signal_name": "Conversion"
    },
    {
        "objective": "Conversion",
        "signal_type": "Volume",
        "signal_name": "Revenue"
    },
    {
        "objective": "Engagement",
        "signal_type": "Efficiency",
        "signal_name": "Cost per Click"
    },
    {
        "objective": "Engagement",
        "signal_type": "Quality",
        "signal_name": "Avg Interaction Time"
    },
    {
        "objective": "Engagement",
        "signal_type": "Quality",
        "signal_name": "Conversion Rate"
    },
    {
        "objective": "Engagement",
        "signal_type": "Volume",
        "signal_name": "Click"
    },
    {
        "objective": "Engagement",
        "signal_type": "Volume",
        "signal_name": "Interaction"
    },
    {
        "objective": "Engagement",
        "signal_type": "Volume",
        "signal_name": "Interaction Time"
    }
]

我可以将所有内容附加到表中,如下所示:

I can append this all to a table like so:

$.each(data, function(index, key) {
 $('#myTable').append('<tr><td>'+key.objective+'</td><td>'+key.signal_type+'</td><td>'+key.signal_name+'</td></tr>');
                });

这将产生一个非常准确的表,但不会令人赏心悦目.我得到这样的东西:

This yields a perfectly accurate table, but not an eye-pleasing table. I get something like this:

| Signal Type | Signal Types | Available Signals    |
|-------------|--------------|----------------------|
| Awareness   | Efficiency   | CPM                  |
| Awareness   | Quality      | Click-thru Rate      |
| Awareness   | Quality      | Frequency            |
| Awareness   | Quality      | Interaction Rate     |
| Awareness   | Quality      | Viewability          |
| Awareness   | Volume       | Display Time         |
| Awareness   | Volume       | Impression           |
| Awareness   | Volume       | Reach                |
| Conversion  | Efficiency   | Cost per Action      |
| Conversion  | Efficiency   | ROI/ROAS             |
| Conversion  | Quality      | Avg Order Value      |
| Conversion  | Volume       | Conversion           |
| Conversion  | Volume       | Revenue              |
| Engagement  | Efficiency   | Cost per Click       |
| Engagement  | Quality      | Avg Interaction Time |
| Engagement  | Quality      | Conversion Rate      |
| Engagement  | Volume       | Click                |
| Engagement  | Volume       | Interaction          |
| Engagement  | Volume       | Interaction Time     |

(请注意,标头在我的HTML中是硬编码的")

(Note that the header is "hard coded" in my HTML)

我理想中想要的是这样的东西:

What I'd ideally like to have is something like this:

| Signal Type | Signal Types | Available Signals    |
|-------------|--------------|----------------------|
| Awareness   | Efficiency   | CPM                  |
|             | Quality      | Click-thru Rate      |
|             |              | Frequency            |
|             |              | Interaction Rate     |
|             |              | Viewability          |
|             | Volume       | Display Time         |
|             |              | Impression           |
|             |              | Reach                |
| Conversion  | Efficiency   | Cost per Action      |
|             |              | ROI/ROAS             |
|             | Quality      | Avg Order Value      |
|             | Volume       | Conversion           |
|             |              | Revenue              |
| Engagement  | Efficiency   | Cost per Click       |
|             | Quality      | Avg Interaction Time |
|             |              | Conversion Rate      |
|             | Volume       | Click                |
|             |              | Interaction          |
|             |              | Interaction Time     |

此处的区别在于,基于之前的列,各列中存在不同的值.关于如何获得此输出有任何想法吗?请注意,我可以根据最有效的方式调整SQL查询或javascript/jquery(或两者).

The difference here is that there are distinct values in the columns based on the column before. Any thoughts on how to get to this output? Note that I'm able to adjust my SQL query or my javascript/jquery (or both) depending on what's most efficient.

推荐答案

检查该值是否在以前使用过.如果是这样,则打印一个空白字符串,如果不是,则打印新值.

Check if the value is used before. If so print a blank string, if not print the new value.

这将转换为您的附加代码:

This translates to your appending code:

storedObjective = "";
storedSignal_type = "";
$.each(data, function(index, key) {

    if (key.objective == storedObjective)
    {
        print_1 = "";
    }
    else
    {
        print_1 = objective;
        storedObjective = key.objective;
    }
    if (key.signal_type == storedSignal_type)
    {
        print_2 = "";
    }
    else
    {
        print_2 = key.signal_type;
        storedSignal_type = key.signal_type;
    } 

  $('#myTable').append('<tr><td>'+print_1+'</td><td>'+print_2+'</td><td>'+key.signal_name+'</td></tr>');
});   

这篇关于迭代并从JSON中获取一些索引的唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆