Ste*_*eve 1 javascript sorting object
我正在试图解决这个问题时我的头靠在墙上......基本上,我有一个类似于此结构的物体:
results = {
1 : {
url : '/',
matches: {
title : true,
h1 : false,
copy : 2
}
},
2 : {
url : '/?id=2',
matches: {
title : true,
h1 : true,
copy : 0
}
},
3 : {
url : '/id=3',
matches: {
title : false,
h1 : false,
copy : 6
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是自定义搜索的结果集.我需要结果根据对象内的匹配来获得相关性的权重.结果应该像这样排序:
匹配match.title == true的结果是最重要的结果.在此子集中,matches.h1为true,具有最大权重(最顶层),后跟页面副本中出现的次数(matches.copy).
具有matches.h1 == true的结果将在结果视图中显示下一个,按页面副本中出现的次数(matches.copy)排序.
matches.title和matches.h1都为false的结果在matches.copy上按降序排序.
这对当前的对象结构是否可行?或者我是否需要将其拆分并交叉引用每个子集?尔加!它太早了,咖啡不能正常工作:(
编辑:将 结果集转换为对象数组.新结构:
results = [
{ pageid: 1, url: '/', matches: { title: true, h1: false, copy: 2 } },
{ pageid: 2, url: '/?id=2', matches: { title: true, h1: true, copy: 0 } },
{ pageid: 3, url: '/?id=3', matches: { title: false, h1: false, copy: 6 } }
]
Run Code Online (Sandbox Code Playgroud)
排序仍在逃避我.我以前做过简单的排序,但没有达到这个程度.我遇到了LINQ,看起来很有希望,但我没有使用它的经验.不确定这是否是正确的方向.
我推荐使用数组,它是为有序列表设计的.
您可以使用.sort
并提供自定义搜索功能:http://jsfiddle.net/uR4Jn/2/.
首先尝试向上移动一个元素,.title === true
如果另一个元素有.title === false
.否则,尝试向上移动具有.h1 === true
其他元素的元素.h1 === false
.最后,只是排序.copy
.(并且,如果相反的情况属实,则在前两种情况下将项目向下移动.)
var results = [
{
url : '/',
matches: {
title : true,
h1 : false,
copy : 2
}
},
{
url : '/?id=2',
matches: {
title : true,
h1 : true,
copy : 0
}
},
{
url : '/id=3',
matches: {
title : false,
h1 : false,
copy : 6
}
},
{
url : '/id=3',
matches: {
title : false,
h1 : false,
copy : 7
}
}
];
results = results.sort(function(a, b) {
return (a.matches.title && !b.matches.title ? -1
: (!a.matches.title && b.matches.title ? 1
: (a.matches.h1 && !b.matches.h1 ? -1
: (!a.matches.h1 && b.matches.h1 ? 1
: b.matches.copy - a.matches.copy))));
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
516 次 |
最近记录: |