【问题标题】:unable to find the array object is continuous or not [closed]无法找到数组对象是否连续[关闭]
【发布时间】:2021-04-29 04:45:58
【问题描述】:

以下是我尝试过的场景

我试图找出数字范围之间的连续性或不连续性。

这是标准。

1 - 100, 101 - 300 在这个对象之后有不连续,它将是 301。我需要找到它是否是不连续的。 401 - 500。

我们需要找到继续或停止。

下面是我的对象

const obj = [{start:1, end: 100},
    {start:401, end: 500},
    {start:101, end: 300}]

我使用排序从数组中对起始字段进行排序。

在我使用 forEach 之后,我使用了 if 条件来检查当前对象的结束值是否等于下一个对象的开始。 任何帮助,谢谢

const obj = [{start:1, end: 100},
{start:401, end: 500},
{start:101, end: 300}]

obj.sort(function(a, b) { 
    return a.start - b.start;
})

obj.forEach((arr, i)=>{
    
})

【问题讨论】:

  • 请修正您的问题的formatting
  • const obj = [{start:1, end: 100}, {start:401, end: 500}, {start:101, end: 300}] 的输出应该是什么?
  • 输出:真或假(我们需要排序的对象数量,在我们需要查找之后是否继续 - 每个对象)
  • 在 300 之后有不连续性,下一个对象将是 301,但它是给定数组中的 {start:401, end: 500}。

标签: javascript angular ecmascript-6


【解决方案1】:

你可以这样做:

 let obj = [{start:1, end: 100},
    {start:401, end: 500},
    {start:101, end: 300}]

    obj.sort(function(a, b) { 
        return a.start - b.start;
    })
    for (let i = 0; i < obj[obj.length - 1].end; i ++) {
      if (i + 1 < obj.length && obj[i].end + 1 !== obj[i + 1].start) {
        console.log('Discontinuity: ', obj[i].end + 1);
      }
    }
    //With forEach if needed
    obj.forEach( (element, i) => {
      if (i + 1 < obj.length && obj[i].end + 1 !== obj[i + 1].start) {
         console.log('Discontinuity: ', obj[i].end + 1);
      }
    })

【讨论】:

  • 它的有效输出,但可以使用 **forEach 代替 for。因为迭代次数非常多,它大约是循环的 700 倍。性能非常差。
  • for 的复杂度是 O(n),这是最好的情况之一,只输 O(1)。也许问题出在sort 函数上,我不确定它的复杂性。所以对于你描述的问题,这就是答案。
  • 现在,我明白了,我将使用 forEach 解决方案进行编辑和添加
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2014-06-06
  • 2021-03-09
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多