2

jqueryを使用して一意のマーチャント名を取得し、対応するavgpriceとnumproductsを取得する方法は? json データの分離に苦労しています。私を助けてください..私は $.getJSON を使用してこの json ファイルを解析しています。すべてのマーチャント名の後に区切り記号を使用する必要があるグラフを作成しています。したがって、ここで avgprice と numProducts は x 軸と y 軸の値です。だから私はこのようなものを使用する場合

$.getJSON("mock/Insight72.json", function(returnedData) {
        dataLength = returnedData.data.length;
console.log(returnedData)
response = returnedData;
        var x = new Array();
        var y = new Array();
        var mytext, f;

        for ( i = 0; i < dataLength; i++) {

            x[i] = returnedData.data[i].avgPrice;
            y[i] = returnedData.data[i].numProducts;

x 軸と y 軸は同じ順序で格納されます。しかし、マーチャント名に対応する avgprice と numProducts を取る必要があるように解析する必要があります。これが明確になることを願っています..

 {
    "id" : "72",
    "title" : "Item Category Product Level Average Price Comparison",
    "xLabel" : null,
    "yLabel" : "Average Price",
    "zLabel" : null,

    "data" : [
        {
            "avgPrice" : 10,
            "categoryID" : "152b7934dd7e4fbeac56f825b5deaebd",
            "categoryName" : "Coffee Makers",
            "merchantID" : "99a8cd5687d245f8bff2152fec710973",
            "merchantName" : "Crate & Barrel",
            "numProducts" : 400
        },
        {
            "avgPrice" : 20,
            "categoryID" : "152b7934dd7e4fbeac56f825b5deaebd",
            "categoryName" : "Coffee Makers",
            "merchantID" : "f5b2c736eace488a859fb6c56f366522",
            "merchantName" : "Williams-Sonoma",
            "numProducts" : 500 
        },
        {
            "avgPrice" :30,
            "categoryID" : "152b7934dd7e4fbeac56f825b5deaebd",
            "categoryName" : "Coffee Makers",
            "merchantID" : "6ee163f4f236466289fae97bb40351b7",
            "merchantName" : "Amazon",
            "numProducts" : 38
        },
        {
            "avgPrice" : 40,
            "categoryID" : "50215adc9ef64f91b4f4898fda7cf0b5",
            "categoryName" : "Dishwashers",
            "merchantID" : "99a8cd5687d245f8bff2152fec710973",
            "merchantName" : "Crate & Barrel",
            "numProducts" : 300 
        },
        {
            "avgPrice" : 50,
            "categoryID" : "50215adc9ef64f91b4f4898fda7cf0b5",
            "categoryName" : "Dishwashers",
            "merchantID" : "f5b2c736eace488a859fb6c56f366522",
            "merchantName" : "Williams-Sonoma",
            "numProducts" : 320
        },
        {
            "avgPrice" : 60,
            "categoryID" : "50215adc9ef64f91b4f4898fda7cf0b5",
            "categoryName" : "Dishwashers",
            "merchantID" : "6ee163f4f236466289fae97bb40351b7",
            "merchantName" : "Amazon",
            "numProducts" : 350
        }
    ]
}
4

2 に答える 2

2

これが実際のフィドルです: http://jsfiddle.net/Esv6f/

/* get all items by merchant*/
function get_items_by_merchant(merchant_name) {
    var items = new Array();
    $.each(json.data, function(index, item) {
        if (item.merchantName == merchant_name) 
            items.push(item);
    });

    return items;
}

/* get items of merchant "Amazon" */
var amazon_items = get_items_by_merchant("Amazon");

/* count the total num of products */ 
var amazon_num_products_total = 0;

/* loop items */
$.each(amazon_items, function(index, item) {
    amazon_num_products_total += item.numProducts; // add numProducts 

    /* alert the avgPrice and numProducts of the CURRENT item */
    alert("avgPrice: " + item.avgPrice + " numProducts: " + item.numProducts);
});

/* alert the total num of products of amazon */ 
alert("Amazon numProducts total: " + amazon_num_products_total);
于 2013-05-10T13:06:58.213 に答える
0

この関数は、最初に見つかった一致を返します。

function getMerchantName(data, avgPrice, numProducts) {
    for(x in a.data) {
        if(a.data[x].avgPrice === avgPrice && a.data[x].numProducts === numProducts)
            return a.data[x].merchantName;
    }
}

フィドル

于 2013-05-10T13:04:25.150 に答える