定义基于数组中的属性对数组进行排序的本机方法

时间:2014-10-07 00:29:02

标签: javascript web

现在正在处理这个简单的任务,我似乎无法弄清楚问题是什么。我有一个对象数组,每个对象都有一个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(this [0] == undefined)来检查数组是否为空但是没有按照我的计划运行

1 个答案:

答案 0 :(得分:1)

你有:

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

i(在循环内)的最大值为this.length-1。因此,(i+1 > this.length) 永远不会成真。