如何根据键对对象数组进行排序并设置一个附加键,该键应在顺序更改时递增?
How to sort a array of object based on a key and set an addition key which should increment upon change in sequence?
我有一个数组,它应该根据 conditionalTo 进行排序,并根据序列设置索引,只要序列发生变化,索引就应该递增。完成后,我们需要在索引中基于 computationTo 再次对数组进行排序,只应进行二级排序
const array =
[
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
]
根据 conditionalTo 排序并为每个序列添加编号
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400, sequece: 1},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300, sequece: 1},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200, sequece: 2},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000, sequece: 2},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000, sequece: 3},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150, sequece: 3},
]
根据 computationTo 和 sequence 排序
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
]
尝试了很多方法,包括 noramal sort lodash sortby orderby 但没有任何效果请帮助
添加的序列实际上是一种解决方法,但实际上没有任何效果
const SlabDetails = orderBy(this.tableData, [r => r.conditionalTo - r.conditionalFrom, r => r.computationTo - r.computationFrom], "asc");
Previous question
你想的顺序错了。你可以先sort
基于conditionalTo
和computationTo
的数组。然后,为每个对象添加一个sequence
属性。如果 conditionalTo
与前一个对象
不同,则增加它
const array =[{conditionalFrom:102,conditionalTo:112,computationFrom:10,computationTo:150},{conditionalFrom:0,conditionalTo:100,computationFrom:0,computationTo:400},{conditionalFrom:10,conditionalTo:100,computationFrom:0,computationTo:300},{conditionalFrom:0,conditionalTo:110,computationFrom:20,computationTo:200},{conditionalFrom:12,conditionalTo:112,computationFrom:100,computationTo:1000},{conditionalFrom:100,conditionalTo:110,computationFrom:1001,computationTo:100000},];
array.sort((a,b) => a.conditionalTo - b.conditionalTo || a.computationTo - b.computationTo)
let previous,
sequence = 0;
for (const o of array) {
if (o.conditionalTo !== previous) {
++sequence;
previous = o.conditionalTo
}
o.sequence = sequence
}
console.log(array)
我有一个数组,它应该根据 conditionalTo 进行排序,并根据序列设置索引,只要序列发生变化,索引就应该递增。完成后,我们需要在索引中基于 computationTo 再次对数组进行排序,只应进行二级排序
const array =
[
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
]
根据 conditionalTo 排序并为每个序列添加编号
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400, sequece: 1},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300, sequece: 1},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200, sequece: 2},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000, sequece: 2},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000, sequece: 3},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150, sequece: 3},
]
根据 computationTo 和 sequence 排序
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
]
尝试了很多方法,包括 noramal sort lodash sortby orderby 但没有任何效果请帮助 添加的序列实际上是一种解决方法,但实际上没有任何效果
const SlabDetails = orderBy(this.tableData, [r => r.conditionalTo - r.conditionalFrom, r => r.computationTo - r.computationFrom], "asc");
Previous question
你想的顺序错了。你可以先sort
基于conditionalTo
和computationTo
的数组。然后,为每个对象添加一个sequence
属性。如果 conditionalTo
与前一个对象
const array =[{conditionalFrom:102,conditionalTo:112,computationFrom:10,computationTo:150},{conditionalFrom:0,conditionalTo:100,computationFrom:0,computationTo:400},{conditionalFrom:10,conditionalTo:100,computationFrom:0,computationTo:300},{conditionalFrom:0,conditionalTo:110,computationFrom:20,computationTo:200},{conditionalFrom:12,conditionalTo:112,computationFrom:100,computationTo:1000},{conditionalFrom:100,conditionalTo:110,computationFrom:1001,computationTo:100000},];
array.sort((a,b) => a.conditionalTo - b.conditionalTo || a.computationTo - b.computationTo)
let previous,
sequence = 0;
for (const o of array) {
if (o.conditionalTo !== previous) {
++sequence;
previous = o.conditionalTo
}
o.sequence = sequence
}
console.log(array)