2017-09-01 216 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