2016-08-19 55 views
2

可以告訴我如何使用Underscore.js找出屬性的第一個匹配項(不需要完全匹配)?要找出屬性的第一個匹配項(不需要完全匹配)

我已經試過this.But它在我的名單,其中有townNameRocky Point上只返回精確匹配的property.Let的發言權。但我需要選擇Rocky also.So我該怎麼辦呢?

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' 
+0

嘗試'd.townName.indexOf(result.data [0] .Prop ertyData.School)!== -1'。這將檢查城鎮名稱的字符串是否包含學校名稱的字符串,而不是它們需要精確。如果你還需要在'Rocky Point'中找到'rocky',你可以在這兩個字符串中添加'toLowerCase()'。 – Shilly

+0

@Shilly您的解決方案也無法正常工作。這是代碼片段.'var schoolDistrict = _.find(vm.schoolDistricts,function(s){return s.townName.indexOf(result.data [0] .PropertyData.School )!== -1;});' – Sampath

+0

@Shilly你是對的,我必須使用'toLowerCase()'。然後它才能工作。你想把它當作答案嗎?謝謝。 – Sampath

回答

1

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>

+0

不幸的是,它不適合我。這是代碼片段.'var schoolDistrict = _.find(vm.schoolDistricts,function(s){ return s.townName.indexOf(result.data [0] .PropertyData.School) !== -1 || result.data [0] .PropertyData.School.indexOf(s.townName)!== -1; });' – Sampath

+0

@Sampath這很奇怪。你確定你的結果看起來像你寫的嗎?它應該工作。 – Tholle

1

使用正則表達式模式來測試,如果名稱中包含的文本,用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>