查找属性的第一次出现(不需要精确匹配)

To find out the first occurrence of a property (no need to be exactly matched)

本文关键字:不需要 属性 第一次 查找      更新时间:2023-09-26

你能告诉我如何通过使用Underscore.js找出属性的第一次出现(不需要完全匹配)吗?

我试过了。但它只返回完全匹配的属性。假设在我的列表中有townNameRocky Point,但我也需要选择Rocky。那么我该怎么做呢?

var schoolDistrict = _.find(vm.schoolDistricts, function (d) { return d.townName 
== result.data[0].PropertyData.School; }); 

vm.schoolDistricts = [townName:'Rocky Point',...]
result.data[0].PropertyData.School = 'Rocky'

OP的反馈:我已经使用如下所示,工作良好:)

var schoolDistrict = _.find(vm.schoolDistricts, function (s) { return 
s.townName.toLowerCase().indexOf(result.data[0].PropertyData.School.toLowerCase(
)) !== -1; });

另一种方式:

你可以做一个基本的检查,如果一个字符串是另一个字符串的子字符串。为了更好的搜索,您还可以将字符串小写:

var schoolDistricts = [
  {townName:'Rocky Point'}, 
  {townName: 'Roc'}
];
var searchString = 'Rocky'.toLowerCase();
var res = _.find(schoolDistricts, function(s) {
  var townName = s.townName.toLowerCase();
  return townName.indexOf(searchString) !== -1 || searchString.indexOf(townName) !== -1; 
});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

使用RegExp模式测试名称是否包含文本,使用i标志忽略大小写:

var schoolDistricts = [{
  townName: 'South Rock'
}, {
  townName: 'Red Herring'
}, {
  townName: 'Rocky Point'
}, {
  townName: 'Whatnot'
}];
var school = 'Rocky'; // replacement for result.data[0].PropertyData.School
var pattern = new RegExp(school, 'i');
var result = _.find(schoolDistricts, function(d) {
  return pattern.test(d.townName);
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>