我试图通过关键字列表来实现过滤逻辑。如果我写了一个确切的关​​键字,即某个项目已经具有相同的名称,它将返回一个及多个具有newhotel的关键字。

我希望我的逻辑返回名称为new hotel的项目,但它还会返回该名称和3。然后我认为我需要按最佳匹配对返回的列表进行排序,因此具有new hotel的项目应显示在第一个索引中。如何按最佳匹配对返回列表进行排序?



const itemList = [{
    id: 23948,
    name: 'Arthouse Hotel New York'
  }, {
    id: 1231,
    name: 'Highgate Hotels new York Corperate Office'
  }, {
    id: 98237,
    name: 'new hotel'
  }, {
    id: 91829371,
    name: 'Smoke Gallery',
  },
  {
    id: 1123,
    name: 'Hotel Indigo Boston-Newton Riverside'
  }, {
    id: 919191,
    name: 'Pine Cay Hotel'
  }
];

const filterByValue = ['new', 'hotel'];


const nonIncludedItems = itemList.filter(property =>
  filterByValue.some(
    term => !property.name.toLowerCase().includes(term.toLowerCase())
  )
);
const includedItems = itemList.filter(property =>
  filterByValue.some(term =>
    property.name.toLowerCase().includes(term.toLowerCase())
  )
);

const result = includedItems.filter(i => !nonIncludedItems.includes(i));

console.log('result', result);

最佳答案

一般来说,您要尝试的是模糊搜索。为此,请查看FuseJS

一种快速而肮脏的方法是只使用string-similarity之类的东西

它接受一个字符串以针对字符串数组进行搜索...因此我们可以将您的关键字加入一个字符串中,然后搜索所有酒店名称的数组。

它将返回一个对象,该对象由“最佳匹配”组成,然后返回其余各有其各自的评分。这样,您可以简单地按额定值从最低到最高对数组进行排序,反之亦然。

检查上面链接上的文档以获取更多信息。

Stackoverflows代码段控制台未完全显示它在jsbin或codepen之类的其他游乐场中的功能,因此下面是响应的屏幕截图。

javascript - 按关键字数组过滤列表并按最佳匹配排序-LMLPHP



const itemList = [{
    id: 23948,
    name: 'Arthouse Hotel New York'
  }, {
    id: 1231,
    name: 'Highgate Hotels new York Corperate Office'
  }, {
    id: 98237,
    name: 'new hotel'
  }, {
    id: 91829371,
    name: 'Smoke Gallery',
  },
  {
    id: 1123,
    name: 'Hotel Indigo Boston-Newton Riverside'
  }, {
    id: 919191,
    name: 'Pine Cay Hotel'
  }
];

const filterByValue = ['new', 'hotel'];

const names = itemList.map(hotel => hotel.name)
const bestMatch = stringSimilarity.findBestMatch(filterByValue.join(' '), names)

console.log(bestMatch)

<script src="//unpkg.com/string-similarity/umd/string-similarity.min.js"></script>

关于javascript - 按关键字数组过滤列表并按最佳匹配排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60437241/

10-11 08:59