我目前正在构建一个简单的输入框,用于标记基于现有名称和电子邮件ID列表输入的电子邮件ID。当开始在“收件人”框中键入电子邮件地址时,类似于gmail和outlook所做的事情。
我对每个邮件地址都有频率和lastUsedTimeStamp数据。基于此,我需要对建议进行排序,以便将最有用的选项带到顶部。我得到的第一个想法是基于'frequency / durationSincelastUsed'进行排序,但感觉它会严重影响结果集。下一个想法是首先比较频率,然后比较同等使用的建议之间的时间戳。
有没有人有更好的想法?想知道Gmail如何做到这一点。现在打破我的头一段时间。
答案 0 :(得分:0)
我第一次做这样的事情,我根据自上次使用以来的时间计算了一个值。如果在过去15分钟内使用了电子邮件地址,那么该值非常高(如100)。然后在几个小时后迅速下降到0。
我的排序首先使用该值,然后使用频率。
这背后的想法是,当你向一个不经常使用的地址发送邮件时,你发送另一封邮件到同一地址的可能性很高(例如你可能发送了多张图片),但是它会在相对较短的时间内下降。
我使用的另一种方法是维护固定大小的“最近收件人”列表。因此,您发送电子邮件的最后5个地址始终显示在列表顶部。每当我发送电子邮件时,我都会将该地址放在列表的顶部并推出底部的地址。
这两者都易于实施且有效。我发现第二个更容易实现,并且我能够让用户定义最近收件人列表的大小。
第二个也更容易向您的用户解释。让用户理解第一个中的滑动时间尺度变得困难,并且几乎不可能为他们创建一个接口来微调衰减周期。
答案 1 :(得分:-1)
我带来了一个相关的答案:按标签
对电子邮件列表(例如收件箱)进行排序在chrome中,例如,打开Inspect源代码,转到COnsole并复制此Javascript代码
!function() { //ordenar por tag
function e(e)
{
var t,u,v,w,n,a,p,q,r,s,l=e.getElementsByTagName("td");
for(a=0;a<l.length;a++)
{
if("xY a4W"==l[a].className)
for(t=l[a].getElementsByTagName("div"),p=0;p<t.length;p++)
if("xS"==t[p].className)
for(u=t[p].getElementsByTagName("div"),q=0;q<u.length;q++)
if("xT"==u[q].className)
for(v=u[q].getElementsByTagName("div"),r=0;r<v.length;r++)
if("yi"==v[r].className)
for(w=v[r].getElementsByTagName("div"),s=0;s<w.length;s++)
if("ar as"==w[s].className&&(n=w[s].getElementsByTagName("div"),n.length))
return n[0].getAttribute("title");
if(l[a].hasAttribute("role")&&"link"==l[a].getAttribute("role"))
for(t=l[a].getElementsByTagName("div"),r=0;r<t.length;r++)
if("y6"==t[r].className&&(n=t[r].getElementsByTagName("span"),n.length))
return n[0].innerHTML
}
return""
}
function t(e,t)
{
return e=e[0].toLowerCase(),t=t[0].toLowerCase(),t>e?-1:e>t?1:0
}
function n(n)
{
var a=Array.prototype.slice.call(n.getElementsByTagName("tr"),0);if(a.length)
{
for(var r=a[0].parentNode,l=[],g=0;g<a.length;g++)l[g]=[e(a[g]),a[g]];
for(l=l.sort(t),g=0;g<l.length;g++)
r.appendChild(l[g][1])
}
}
for(var a=document.getElementsByTagName("table"),r=0;r<a.length;r++)
if("F cf zt"==a[r].className)
{
n(a[r]);break
}
}();
(感谢https://www.gtricks.com/gmail/sort-gmail-subject-label-sender/了解发件人的初始想法)