2017-03-02 73 views
-1

我需要你的幫助,這陣,我真的不知道如何排序是:複雜陣列分組

[{userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190}] 

成:

[{userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 15}, 
{userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 190}] 

你能幫助我嗎?它可以是lodash或者下劃線,我用兩種方法都試過並且真的不能解決這個問題

+0

這看起來並不像選我。看起來像組合項目。 – epascarello

+1

它不是你想要的排序。此外;在什麼情況下,你將from/to字段分組,因爲userId對所有字段都是相同的。 –

+0

是你的價值不重疊,並按順序? –

回答

0

你可以檢查userId如果相同,檢查一下物品是否有序,然後改變to屬性。

它適用於排序項目。如果沒有排序,則可以在之前應用一種排序。

data.sort(function (a, b) { 
    return a.userId.localeCompare(b.userId) || a.from - b.from; 
}); 

var data = [{ userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6}, { userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15 }, { userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181 }, { userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190 }], 
 
    result = data.reduce(function (r, a) { 
 
     var last = r[r.length - 1] || {}; 
 
     if (last.userId === a.userId && last.to + 1 === a.from) { 
 
      last.to = a.to; 
 
     } else { 
 
      r.push({ userId: a.userId, from: a.from, to: a.to }); 
 
     } 
 
     return r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }