您好,我需要一种更好的方法来检查属性数组是否升序排序。 我用下面的 该数组可以具有动态长度属性。
必须使用DrawCD属性对数组进行排序 我想以更好的方式做到这一点,而不需要使用for循环,如果可以的话,可以使用Array原型函数
spring.cloud.stream.bindings.input.consumer.concurrency
答案 0 :(得分:4)
您可以使用Array#every
进行检查,然后将该属性进行检查。
var pevDrawInfo = [{ drawCD: 16281, drawTime: "14:55:00", winCol: 2, oddEven: 0 }, { drawCD: 16280, drawTime: "14:50:00", winCol: 2, oddEven: 0 }, { drawCD: 16279, drawTime: "14:45:00", winCol: 2, oddEven: 0 }, { drawCD: 16278, drawTime: "14:40:00", winCol: 2, oddEven: 0 }];
console.log(pevDrawInfo.every((b, i, { [i - 1]: a }) => !a || a.drawCD < b.drawCD));
pevDrawInfo.sort(({ drawCD: a }, { drawCD: b }) => a - b);
console.log(pevDrawInfo.every((b, i, { [i - 1]: a }) => !a || a.drawCD < b.drawCD));
答案 1 :(得分:0)
“更好”通常表示“可重用”,“更快”或“更具可读性”:
“可重用”:
将其抽象为带有数组和键的函数,并检查每个对象的key属性是否在递增。
使其具有动态长度,i < 2
将不起作用。
“更快”
不确定是否可以改进您的代码,它已经是O(n),并且没有使用不必要的变量/循环。
不过,您可以提早退出:如果找到了一个递减的条目,则不必检查其余条目。
“更具可读性”
看起来已经不错了(比说实话的答案要好)。
function isAscending(array, key) {
for (let i = 1; i < array.length; i++) {
if (array[i - 1][key] - array[i][key] > 0)
return false;
}
return true;
}
“不使用for循环的更好方式”
为什么?它使您的代码更具可读性吗?在这种情况下:绝对不能(向同事展示妮娜的答案,并问他做什么)。因为比较慢?不会。实际上,这比滥用Array助手之一做他们不想要的事情要快。
答案 2 :(得分:0)
您可以首先将对象数组map()
设置为所需值的数组。然后将其与排序后的数组进行比较。
var pevDrawInfo = [{ drawCD: 16281, drawTime: "14:55:00", winCol: 2, oddEven: 0 }, { drawCD: 16280, drawTime: "14:50:00", winCol: 2, oddEven: 0 }, { drawCD: 16279, drawTime: "14:45:00", winCol: 2, oddEven: 0 }, { drawCD: 16278, drawTime: "14:40:00", winCol: 2, oddEven: 0 }];
function isSorted(arr,key){
arr = arr.map(x => x[key])
return JSON.stringify(arr) === JSON.stringify(arr.sort((a,b) => b-a))
}
console.log(isSorted(pevDrawInfo,"drawCD"))
答案 3 :(得分:0)
您可以使用reduce
函数:
!!pevDrawInfo.reduce((n, item) => item.drawCD >= n.drawCD && item)
pevDrawInfo = [{
"drawCD": 16281,
"drawTime": "14:55:00",
"winCol": 2,
"oddEven": 0
},
{
"drawCD": 16288,
"drawTime": "14:50:00",
"winCol": 2,
"oddEven": 0
},
{
"drawCD": 16288,
"drawTime": "14:45:00",
"winCol": 2,
"oddEven": 0
},
{
"drawCD": 16298,
"drawTime": "14:40:00",
"winCol": 2,
"oddEven": 0
}
];
console.log(!!pevDrawInfo.reduce((n, item) => item.drawCD >= n.drawCD && item))
答案 4 :(得分:0)
我的方式...(更具可读性)
var
pevDrawInfo = [
{ "drawCD": 16281, "drawTime": "14:55:00", "winCol": 2, "oddEven": 0 }
, { "drawCD": 16280, "drawTime": "14:50:00", "winCol": 2, "oddEven": 0 }
, { "drawCD": 16279, "drawTime": "14:45:00", "winCol": 2, "oddEven": 0 }
, { "drawCD": 16278, "drawTime": "14:40:00", "winCol": 2, "oddEven": 0 }
];
var sorted = true;
pevDrawInfo.reduce((a,c)=>{
sorted = sorted && (a.drawCD > c.drawCD); // strict descending order (change to >=, < or <=..)
return c;
})
console.log( 'strict descending order :', sorted )