数组的 Javascript 顺序。是随机的吗?

标签 javascript arrays

我需要能够预测数组中对象的顺序。 我的数组将由包含 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

根据我的理解,如果 channel (other) 存在,它将添加到数组中 [0 (x axis), 0(y axis, so the first element in the array so (其他), 值] 如果没有,它将跳过这个并转到下一个。

然而,当我打印 table_cat 时,我得到的数组是随机的(?)顺序,比如 Referral,Direct,Social,(Other),Organic Search 为什么会这样?我缺少什么?

编辑:

所以我的数据看起来像这样,但是我不知道那里可能有哪些 channel ,但我知道选项:

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];
});

关于数组的 Javascript 顺序。是随机的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44053056/

相关文章:

javascript - 添加的数据消失

javascript - Mongo/Mongoose - markModified 不起作用

python - 除以 numpy 数组

c# - 摆脱 C# 数组中的 null/空字符串值

java - 基本的java数组方法

使用函数(频率)计算字符数

javascript - 当用户点击后退按钮或刷新页面时如何保留应用的搜索过滤器?

javascript - AngularJS 在 HTML 中呈现为纯文本

javascript - 将 JavaScript 操作与 DOM 集成的最佳实践

javascript - Ng-repeat 在将值插入数组后不更新,尝试了 $scope.$apply() 但返回错误