用单词对JavaScript数组进行排序



我有许多层的对象。看起来这样:

var array = [
  {
    fields: { title: "Some title here" },
    sys: { id: "1234" }
  },
  {
    fields: { title: "Another one there" },
    sys: { id: "13456" }
  },
  {
    fields: { title: "Final example" },
    sys: { id: "234" }
  },
  {
    fields: { title: "Most final thing" },
    sys: { id: "4665" }
  },
];

现在,我想根据fields.title中是否存在文本来对数组进行排序。例如,我有"最终搜索"一词。需要对数组进行排序,以便当前的array[2]array[3]移至最高位置,因为它们包含"最终"一词。

这类需要包含多个单词。因此,如果我使用短语"最终示例",array[2]将首先进行,因为它包含两个单词,其次是array[3],仅包含"最终"。

这是可能的吗?

是的,这是可能的。

您可以按空格角色将字符串拆分,计算2个生成的数组的相交并将其用于排序。遵循相同逻辑并且应该更快的另一个选项是使用正则表达式和String.prototype.match方法,例如:

function finder(input) {
    var reg = new RegExp(input.trim().split(' ').join('|'), 'gi');
    return function(el) {
       var m = el.fields.title.match(reg);
       return m ? m.length : -1;
    }         
}
function sortBy(arr, input) {
    var find = finder(input);
    return arr.sort(function (a, b) {
        return find(a) < find(b);
    });
}
sortBy(array, "user input");

这是一个演示。

您所描述的内容比标题所建议的要复杂一些 - 使用小文本搜索和排名库,例如Twitter的Bloodhound。

最新更新