Javascript填充缺失的范围(整数)

Javascript fill in the missing ranges (integers)

本文关键字:整数 范围 填充 Javascript      更新时间:2023-09-26

我有一个排序的对象数组,每个对象都有开始和结束坐标,相对于包含所有这些坐标的更大范围声明。我想创建新的对象并将它们放入数组中。

JsFiddle链接位于底部

这是一个视觉表示:

之前:

|---------------------------------------|
   |-----|     |----------|   |------|

之后:

|---------------------------------------|
|---|-----|-----|----------|---|------|-|

我试图使用for循环来查找丢失的范围,然后在找到它们时拼接到适当的对象中。这将创建一个无限循环。

我认为我可以用填充的对象创建一个临时数组,然后将其与原始数组连接起来,并按起始坐标排序,但我希望这样做不必再次对数组进行排序。

这里有一个指向jsFiddle的链接

我认为你的问题是,你正在使用splice来"修改"subfeatures[]数组,(添加一个新元素),但同时你正在该数组上循环,这会导致无限循环,我认为您的逻辑很好,与其使用splice,不如只构建一个新的数组

注释行是你必须做的唯一修改。(你还必须考虑最后一个元素是否不在上限处结束)

    //var newArr=[];
      for (i = 0; i < subfeatures.length - 1; i++) {
        //newArr.push(subfeatures[i]);
        if ( subfeatures[i].end != subfeatures[i+1].start) {
            var feat = {start: subfeatures[i].end, end: subfeatures[i+1].start, type: null};
          console.log("A feature should be placed after the current index: "+i+". This feature would have the starting point: "+subfeatures[i].end+" and the ending point: "+subfeatures[i+1].start); 
          //newArr.push(feat);
        }
      }
//return newArr;

拼接()不是最优的,因为每次找到间隙时都必须移动数组中所有后面的元素。以下是Kossel建议的新阵列的解决方案:

var newArray = [];
for (i = 0; i < subfeatures.length - 1; i++) {
    newArray.push(subfeatures[i]);
    if ( subfeatures[i].end != subfeatures[i+1].start) {
        var feat = {start: subfeatures[i].end, end: subfeatures[i+1].start, type: null};
        newArray.push(feat);
    }
}