2017-02-15 29 views
0

鮮明我有一個工作的jsfiddle演示 https://jsfiddle.net/u1fohjxw/JSLINQ - 從多個列

的想法是創建項目的唯一列表,基於多個領域。 我知道我已經實現它的方式可以得到改進,但需要在JSLINQ中進行建議。

這個過濾的獨特列表我然後手動循環並再次添加 - 這可以在JSLINQ中完成。

請說明這個應該怎麼做:

var myList = [ 
      {FirstName:"Chris",LastName:"Pearson"}, 
      {FirstName:"Chris",LastName:"Pearson"}, 
      {FirstName:"Chris",LastName:"Sutherland"}, 
      {FirstName:"John",LastName:"Ronald"}, 
      {FirstName:"Steve",LastName:"Pinkerton"} 
      ]; 


var exampleArray = JSLINQ(myList) 
            .Distinct(function(item){ return item.FirstName.concat(";",item.LastName)}).items 

var newList = [];  

for (var x = 0 ; x < exampleArray.length ; x++) { 
     var arraylist = exampleArray[x].split(";"); 
     var y= new Object(); 
    y.FirstName = arraylist[0]; 
    y.LastName = arraylist[1]; 
    newList.push(y); 
    };     

回答

1

你怎麼樣? :)

也許這樣的事情可以幫助你:

var myList = [ 
      {FirstName:"Chris",LastName:"Pearson"}, 
      {FirstName:"Chris",LastName:"Pearson"}, 
      {FirstName:"Chris",LastName:"Sutherland"}, 
      {FirstName:"John",LastName:"Ronald"}, 
      {FirstName:"Steve",LastName:"Pinkerton"} 
      ]; 

var resultList = myList.Distinct(function(x){ 
            return { 
             FirstName: x.FirstName, 
             LastName: x.LastName 
            } 
           }).ToArray(); 

這將返回不同的內部返回的對象的數組。

編輯:

更改不同的方法來這樣:

Distinct: function(clause) { 
     var item, dict = {}, retVal = []; 
     for (var i = 0; i < this.items.length; i++) { 
      item = clause.apply(this.items[i], [this.items[i]]); 
      if (dict[JSON.stringify(item)] === undefined) { 
       dict[JSON.stringify(item)] = true; 
       retVal.push(item); 
      } 
     } 
     dict = null; 
     return JSLINQ(retVal); 
    }, 

這不是壓力測試,我不知道多少時間將通過10K +對象進行迭代,但它的東西來研究並改進! :)

如果您想嘗試,還有另一種可能的fix

乾杯!

+0

謝謝eduardo,它目前只返回一個對象(第一項)https://jsfiddle.net/u1fohjxw/1/ –

+0

彼得,發現了一些東西! 在不同的方法中,你在foreach中有這個: // TODO - 這不能正確比較對象。需要解決這個問題 這就是問題所在,因爲比較沒有比較對象值,所以它不會做這項工作,它會比較[object Object]。 我已經編輯了我的答案,並更新了JSLINQ方法。 –

+0

非常感謝Eduardo,看到你提交給圖書館! –