我需要能够预测数组中对象的顺序。
我的数组将由包含 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
最佳答案
您可以使用一个对象作为所需数字的引用,并且只使用一个 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/