2017-09-01 96 views
0

,我有以下数据:排序阵列

phones: { 
    'home': { 
    number: '1234567890', 
    primary: false, 
    preferred: false 
    }, 
    'mobile': { 
    number: '2134567890', 
    primary: true, 
    preferred: true 
    }, 
    'work': { 
    number: '1234567809', 
    primary: false, 
    preferred: true 
    } 
} 

我传送到一个阵营组成:

render: function() { 
    return (
    <MyComponent data={ 
     Object.keys(phones) 
     .reduce((prev, key) => [...prev, phones[key]], []) // omitting keys 
     .sort(this.sortPhoneNumbers) 
     } 
    /> 
) 
} 

这是我的自定义排序功能:

sortPhoneNumbers: function (a, b) { 
    if (a.preferred === b.preferred) { 
    return (b.primary - a.primary) 
    } else if (a.preferred < b.preferred) { 
    return 1 
    } else if (a.preferred > b.preferred) { 
    return -1 
    } else { 
    return 0 
    } 
} 

我想用Lodash sortBy function来代替。

回答

0

您可以将它从Object.keys().reduce

<MyComponent data={ 
     _.sortBy(Object.keys(phones) 
     .reduce((prev, key) => [...prev, phones[key]], []), 'preferred') 
     } 
    /> 
+0

这样做的输出不会是相当正确的得到的结果。我需要“首选”电话先显示在列表中。如果它是一个“初级”,那么它应该永远是第一位的。现在的方式是,既不是上面展示的手机,也不是之后来的首选手机。 – abpetkov