我在javascript中创建了一个包含对象的数组。 这就是我得到的:
object[
{position:1, value:23},
{position:34, value:22 },
{position:2, value:10},
{position:35,value:9}.....
]
所以我想创建一个for循环,删除那些目的地的对象 (例如,destination =(object1.position - object2.position)* -1)低于18 到以前的对象。
例如:object [2] .position与object [0] .position相距1位置,因此不再需要object [2]。对象[3]相同... 35 - 34 = 1/1< 18 / object [3]不需要。
这就是我写的:
myfullarray = [
{pos:1,value:23},
{pos:34,value:22},
{pos:2,value:10},
(...)
]
myarray = [];
myarray[0] = {
pos:myfullarray[0].pos,
value:myfullarray[0].value
}
for(i=1;i<myarray.length;i++){
for(d=i;d>0;d--){
mydest = myfullarray[i].pos-myfullarray[d].pos;
if(mydest<0){
mydest *= -1
}
if(mydest<18){
}else{
myarray[myarray.length + 1] = {
value:myfullarray[i].value,
pos:myfullarray[i].pos
};
}
}
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
这是一个避免以二次方式迭代的建议。创建一个新数组。然后迭代整个数组,跟踪到目前为止的最小和最大位置,如果当前对象的位置从最小值和最大值开始小于18,则将其添加到新数组中。
编辑:以下是代码的快速说明。
myFullArray = ...
myArray = [];
myArray[0] = myFullArray[0];
var min = myArray[0].pos;
var max = myArray[0].pos;
var current;
for (i = 1; i < myFullArray.length; i++) {
current = myFullArray[i].pos;
if (Math.abs(current - min) < 18) && Math.abs(current - max) < 18)
{
myArray.push(myFullArray[i]);
if (current < min)
min = current;
else if (current > max)
max = current;
}
}
答案 1 :(得分:0)
如果您想更接近原始算法,则应该勾选。
myfullarray = [
{position:1, value:23},
{position:34, value:22 },
{position:2, value:10},
{position:35,value:9}
]
myarray = [];
myarray[0] = {
pos:myfullarray[0].position,
value:myfullarray[0].value
}
myfullarray.splice(0,1);
var mindest = 18;
for(i=0;i<myarray.length;i++){
var myobject = myarray[i];
for(d=i;d<myfullarray.length;d++){
mydest = myobject.position-myfullarray[d].position;
if(mydest<0){
mydest *= -1
}
if(mydest<mindest){
myfullarray.splice(d, 1);
}
}
if (i < myfullarray.length) {
myarray.push(myfullarray[i]);
myfullarray.splice(i,1);
}
}