Javascript填充缺失的范围(整数)
Javascript fill in the missing ranges (integers)
我有一个排序的对象数组,每个对象都有开始和结束坐标,相对于包含所有这些坐标的更大范围声明。我想创建新的对象并将它们放入数组中。
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);
}
}
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误
- Javascript填充缺失的范围(整数)
- 计算范围内的整数
- JavaScript中最大范围的连续整数
- 在检查多个整数范围时替换多个if语句
- jQuery:如何生成给定极限/范围的3个不同的随机整数
- 检查整数是否在其中一个范围内
- 如何将随机字节转换为整数范围
- 无效的列索引未定义.取值范围为[0-8]之间的整数
- 生成范围内不以零开始的随机整数
- 映射整数范围的最佳d3比例
- 随机大整数在范围JavaScript
- 为大范围整数生成随机顺序的聪明方法
- 在JavaScript中打开整数范围