JavaScript检查属性数组是否升序排序

时间:2019-04-17 12:43:08

标签: javascript

您好,我需要一种更好的方法来检查属性数组是否升序排序。 我用下面的 该数组可以具有动态长度属性。

必须使用DrawCD属性对数组进行排序 我想以更好的方式做到这一点,而不需要使用for循环,如果可以的话,可以使用Array原型函数

spring.cloud.stream.bindings.input.consumer.concurrency

5 个答案:

答案 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 )