【发布时间】:2015-07-13 18:17:23
【问题描述】:
假设我有以下数组:
var articles = [
{
id: 7989546,
tags: [
"98#6",
"107#6",
"558234#7"
]
},
//...
]
该数组的每个元素(部分)代表我们网站中的某种内容。它有一个 id 并带有 people (#6) 和/或 标记主题 (#7)。
将向用户提供一个包含建议或推荐标签的 cookie,如下所示:
var suggestions = [
"46#6",
"107#6",
"48793#7"
]
将这些标签视为将向最终用户显示的建议,例如 “也许您有兴趣阅读......”
suggestions 数组已按 标记优先级 排序。这意味着,第一个标签比第二个标签与用户更相关。
现在,我要做的是以同样的方式对我的articles 数组进行排序,即按标签优先级。
不应应用过滤器,因为保证articles 数组的元素具有至少一个来自suggestions 数组的标签。
如果我有一篇带有标签:[ "98#6", "107#6", 558234#7" ] 的文章和另一篇带有标签:[ "46#6", "36987#7" ] 的文章,我希望后者排在第一位,因为 suggestions 中标签 46#6 的优先级高于 107#6数组。
我怎样才能实现这种排序(使用两个数组)?
注意:我们很乐意接受 jQuery 解决方案。
【问题讨论】:
-
假设你的数据量不是太大,你总是可以自己写一个O(n^2)的排序方法,比如冒泡排序或者选择排序。这应该更容易满足您的需求
-
有点困惑。 “46#6”的优先级高于“107#6”。您正在将一个数组的第一个索引与另一个数组的第二个索引进行比较。这是故意的吗?
-
@ChristianHain "46#6" 比 "107#6" 具有更高的优先级,因为 "46#6" 在
suggestions数组中位于 "107#6" 的顶部。但是,您说sugesstions数组上的标记索引定义了它的优先级是对的。索引越小,优先级越高 -
你怎么知道“107#6”顶部的“46#6”。我不明白你为什么要跳过“98#6”
-
@ChristianHain 你应该看看我在问题中展示的
suggestions数组。您可以看到它包含三个元素:[ "46#6", "107#6", "48793#7" ]。46#6是第一,107#6是第二,因此46#6具有更高的优先级。我忽略了"98#6",因为它不在我的suggestions数组中,因此在订购时应该忽略它
标签: javascript jquery arrays