2014-10-07 15 views
0

现在正在处理这个简单的任务,我似乎无法弄清楚问题所在。我有一个对象数组,每个对象都有一个SetIndex属性,我想插入对象并维护由对象Set Indices排序的数组。我认为这很简单,但它似乎没有像我预期的那样工作。定义基于数组中的属性对数组进行排序的本地方法

本地方法插入,但检查数组是否为空的块总是计算为true,并且每次覆盖索引0并且不执行拼接。我认为这是简单的关于JS我错过了,但我似乎无法弄清楚。

Array.prototype.insertAtIndex = function(item) { 
    for (i = 0; i < this.length; i++) { 
     if(i+1 > this.length) 
     { 
      if(this[i].SetIndex <= item.SetIndex && this[i+1].SetIndex >= item.SetIndex) 
      { 
       this.splice(i,0,item); 
      } 
     } 
    } 
    if(this[0].length == 0); 
    { 
     this[0] = item; 
    } 
}; 

我运行下面的测试功能

item1 = {SetIndex: 0,name: 'item1'}; 
item2 = {SetIndex: 1,name: 'item2'}; 
item3 = {SetIndex: 2, name: 'item3'}; 
item4 = {SetIndex: 3, name: 'item4'}; 
item5 = {SetIndex: 4, name: 'item5'}; 
console.log(item1.SetIndex); 
my_array = []; 
my_array.insertAtIndex(item2); 
console.log(my_array); 
my_array.insertAtIndex(item1); 
console.log(my_array); 
my_array.insertAtIndex(item5); 

我已经使用if(此[0] ==未定义),以及检查是否数组为空但没有任何工程如我试图计划

+0

是否有一个原因,不使用属性值来实现自定义排序?即'my_array.sort(function(a,b){return a.SetIndex - b.SetIndex;});'你可以根据需要确定它们是否按顺序排列。 – Lbatson 2014-10-07 00:39:53

+0

以及不知道为什么我的方法将无法正常工作,但不是插入顺序我最后只是使用本地Array.sort在比较a.SetIndex和b.SetIndex 编辑:我写了这个在同一时间intothev01d回答,这是我最终做的。但如果有人知道为什么原来没有工作,将不胜感激 – jankyd 2014-10-07 00:40:55

+0

你错过了一个''(**''var' **'i = 0;我<!'! – Bergi 2014-10-07 01:14:00

回答

1

您有:

for (i = 0; i < this.length; i++) { 
    if(i+1 > this.length) 
    { 
     // dead code 

最大的i(环内)为this.length-1。因此,(i+1 > this.length)可以从不为真。

相关问题