Dav*_*alu 5 javascript arrays sorting lodash
我有一个看起来像这样的对象:
var unsorted = {a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1}
Run Code Online (Sandbox Code Playgroud)
我有兴趣使用 lodash 按降序对其进行排序,因此预期结果应该是:
var sortd = {b: 1, g: 1,c: 2, e: 3, d: 4, f: 6, a: 15}
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用 lodash,orderBy但它给出了一个只包含排序值的数组。
_.orderBy(tempCount, Number, ['desc'])
//Result
[1,1,2,3,4,6,15]
Run Code Online (Sandbox Code Playgroud)
JavaScript不保证对象中键的顺序,这就是 lodash 返回一个数组的原因,因为不能保证具有有序键的对象。看到这个问题。
但是,您可以使用 a Map,它可以保证键的顺序。
你可以用纯 JavaScript 做到这一点:
const unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 };
const sorted = new Map(Object.entries(unsorted).sort((a, b) => a[1] - b[1]));
for (const [key, val] of sorted) {
console.log(key, val);
}Run Code Online (Sandbox Code Playgroud)
您有多种方法可以迭代生成的地图的内容:
map.values(): 获取值数组map.entries():得到的数组[key, value]对map.keys(): 获取一组键请参阅关于 Map 的文档。
您可以使用排序的键/值对构建一个新对象。
实际标准或属性顺序:
要完全控制顺序,请使用带有键的数组并将其作为值的排序访问器。
var unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 },
sorted = _(unsorted)
.toPairs()
.orderBy([1], ['desc'])
.fromPairs()
.value()
console.log(sorted);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
_.orderBy通过使用特定顺序的最后一个参数来降序排序,而不是_.sortBy只允许升序排序。
var unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 },
sorted = _(unsorted)
.toPairs()
.orderBy(1, 'desc')
.fromPairs()
.value()
console.log(sorted);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10211 次 |
| 最近记录: |