我有一个排序的对象数组,每个对象都有开始和结束坐标,相对于包含所有这些坐标的更大范围来说明。我想创建新对象并将它们放入数组中。
这是一个直观的表现形式:
之前:
|---------------------------------------|
|-----| |----------| |------|
后:
|---------------------------------------|
|---|-----|-----|----------|---|------|-|
我试图使用for循环来找到丢失的范围,然后在找到它们时拼接相应的对象。这会产生无限循环。
我认为我可以用填充的对象创建一个临时数组,然后用原始数组连接并按开始坐标排序,但是我想这样做而不必再次对数组进行排序
答案 0 :(得分:1)
我认为你的问题是,你正在使用拼接来修改" subfeatures[]
数组,(添加一个新元素),但同时你循环遍历该数组,导致无限循环,我认为你的逻辑是好的,而不是使用拼接,它可能更容易构建新数组
注释行是您必须做的唯一修改。(您还必须考虑最后一个元素是否未在上限结束)
//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;
答案 1 :(得分:0)
Splice()不是最佳的,因为每次找到间隙时都必须移动数组中的所有后续元素。以下是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);
}
}