2017-03-02 87 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; }