2014-06-30 41 views
0

我有一个如下对象的数组: [{city:“Amsterdam”,country:“Netherlands”},{city:“Norwalk”,country:“United States” }, {city:“Norwalk”,国家:“美国”},{城市:“未知”,国家:“未知”}]在javascript中搜索结果中实现多字段排序

我想实施搜索排序结果,用户输入第一个字母,例如“n”在搜索框中,它应该按以下排序顺序显示结果。 A),与“N” B),与“N” C)包含城市启动国家启动“N” d市)含有国家“N”

我想实现这样的事情

filteredData = gridData.filter(function (rowObj) { 
     if (!!filterText) { 
      //Filter records with some function. 
      return isSubstringIgnoreCase(filterText, rowObj.city) || isSubstringIgnoreCase(filterText, rowObj.country); 
     } 
     return true; 
    }); 
    filteredData.sort(function(a,b) { 
     var cityA = a.city.toLowerCase(), 
      cityB = b.city.toLowerCase(), 
      countryA = a.country.toLowerCase(), 
      countryB = b.country.toLowerCase(); 
     filterText = filterText.toLowerCase(); 
     if(cityA.indexOf(filterText) < cityB.indexOf(filterText) || cityA.indexOf(filterText) < countryB.indexOf(filterText)) { 
      return -1; 
     } else if(cityA.indexOf(filterText) > cityB.indexOf(filterText) || cityA.indexOf(filterText) > countryB.indexOf(filterText)) { 
      return 1; 
     } else if(countryA.indexOf(filterText) < countryB.indexOf(filterText) || countryA.indexOf(filterText) < cityB.indexOf(filterText)){ 
      return -1; 
     } else if(countryA.indexOf(filterText) > countryB.indexOf(filterText) || countryA.indexOf(filterText) > cityB.indexOf(filterText)){ 
      return 1; 
     } else { 
      return 0; 
     } 
    }); 

但它没有按预期工作。请帮我解决这个问题。

回答

1

见我的小提琴:JSFiddle
我用:

Array . filter() 

函数从排序顺序删除重复:A) - C)和B) - d)。
从搜索结果中删除的条目来自命令:C)和D)。