簡體   English   中英

數組的Javascript順序。 它是隨機的嗎?

[英]Javascript order of an array. Is it random?

我需要能夠預測數組中對象的順序。 我的數組將由包含3個值,X軸,Y軸和一個值的數組組成。 Y軸對應於我在數組中添加的對象,因此,例如在添加“ Other我需要確保這是數組中的第一個元素,否則我的數據將被混淆。 我不知道是否存在特定元素。

到目前為止,我對此有一個循環:

            if (i.channel == '(Other)') {
              var pv_on_session = i.pageviews/i.sessions
              table_data.push([0, 0, pv_on_session.toFixed(2) ]) // pv/sess, other, pv
              table_data.push([1, 0, parseInt(i.avg_time)])
              table_cat.push('(Other)')
            };

            if (i.channel == 'Social') {
              var pv_on_session = i.pageviews/i.sessions
              table_data.push([0, 1, pv_on_session.toFixed(2) ]) // pv/sess, social, pv
              table_data.push([1, 1, parseInt(i.avg_time)])
              table_cat.push('Social')
            };

            if (i.channel == 'Direct') {
              var pv_on_session = i.pageviews/i.sessions
              table_data.push([0, 2, pv_on_session.toFixed(2) ]) // pv/sess, other, pv
              table_data.push([1, 2, parseInt(i.avg_time)])
              table_cat.push('Direct')

           if (i.channel == 'Organic Search') {
              var pv_on_session = i.pageviews/i.sessions
              table_data.push([0, 3, pv_on_session.toFixed(2) ]) // pv/sess, other, pv
              table_data.push([1, 3, parseInt(i.avg_time)])
              table_cat.push('Organic Search')
            };


            if (i.channel == 'Referral') {
              console.log('xx is: '+ i.avg_time)
              var pv_on_session = i.pageviews/i.sessions
              table_data.push([0, 4, pv_on_session.toFixed(2) ]) // pv/sess, other, pv
              table_data.push([1, 4, parseInt(i.avg_time)])
              table_cat.push('Referral')
            };

etc

根據我的理解,如果通道(other)存在,它將[0 (x axis), 0(y axis, so first element in the array so (other), value]添加到數組中;如果不存在,它將跳過這並轉到下一個。

但是,當我打印table_cat時,我以隨機(?)的順序獲取數組,例如Referral,Direct,Social,(Other),Organic Search為什么要這樣做? 我想念的是什么?

EDITS:

所以我的數據看起來像這樣,但是我不知道可能有哪個頻道,但是我知道選項:

data =
[{
"channel": "(Other)",
"pageviews": 1388082,
"sessions": 314263,
"avg_time": 54.94890183937861
}, {
"channel": "Referral",
"pageviews": 364869,
"sessions": 50387,
"avg_time": 58.104753437736335
}, {
"channel": "Direct",
"pageviews": 92538,
"sessions": 22118,
"avg_time": 59.21658970091479
}, {
"channel": "Organic Search",
"pageviews": 23470,
"sessions": 4246,
"avg_time": 51.96215449005384
}, {
"channel": "Social",
"pageviews": 8317,
"sessions": 1931,
"avg_time": 58.63430399702078
}]

選項有:

        // (Other) = 0
        // Social = 1
        // Direct = 2
        // Organic Search = 3
        // Referral = 4
        // Paid Search = 5
        // Email = 6
        // Affiliates = 7
        // Other Advertising = 8
        // Display = 9
        // Email = 10

我通過一個簡單的循環遍歷它們,例如:

            data.forEach(function(i){

            if (i.channel == '(Other)') { 
       ....etc

我想實現此表http://jsfiddle.net/cosbgn/vwmw75hx/1/

您可以將一個對象用作所需數字的引用,並且僅使用一個if語句。

var options = {
        '(Other)': 0,
        'Social': 1,
        'Direct': 2,
        'Organic Search': 3,
        'Referral': 4
    };

if (i.channel in options) {
    var pv_on_session = i.pageviews/i.sessions;
    table_data.push([0, options[i.channel], pv_on_session.toFixed(2)]); // pv/sess, other, pv
    table_data.push([1, options[i.channel], parseInt(i.avg_time)]);
    table_cat.push(i.channel);
}

為了對數據數組進行排序,可以使用與上面相同的對象來獲取排序順序。

data.sort(function (a, b) {
    return option[a.channel] - option[b.channel];
});

因此,對於誰通過Google到達這里。 我仍然不完全確定為什么我的數組沒有按照應有的順序排序,但是我設法通過從-1開始的簡單計數來解決這個問題。

像這樣:

var options = [];
var table_data = [];
var count = -1;

channels.forEach(function(i) {
  options.push(i.channel)
  if (options.includes(i.channel)) {
    count += 1
    var pv_on_session = i.pageviews / i.sessions
    table_data.push([0, count, pv_on_session.toFixed(2)]) // pv/sess, other, pv
    table_data.push([1, count, parseInt(i.avg_time)])
  }
})

這表示我標記了@ nina-scholz的正確答案,因為它刪除了所有的if循環,並允許這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM