获取最小和最大的整数对象属性名称

Bor*_*ens 0 javascript

更新 (制定错误的问题,见下面的说明)

我有一个对象,它有一组以数字命名的属性,如示例所示."编号名称"不一定是连续的,也不知道它们的起点或终点.我知道其他属性不会用数字命名.
我知道myObject ["propName"]与myObject.propName相同,但我故意以第一种方式编写它,因为myObject.0看起来很怪异并且没有被所有编辑器识别.

如何获得最小和最大数组索引?

所以在这种情况下

myObject["0"] = undefined
myObject["1"] = {}
myObject["2"] = undefined
myObject["3"] = {}
myObject["4"] = {}
myObject["5"] = undefined
myObject["someOtherProperty"] = {}
Run Code Online (Sandbox Code Playgroud)

会给我这个

minIndex(myObject) == 1
maxIndex(myObject) == 4
Run Code Online (Sandbox Code Playgroud)

在此编辑之前的所有答案
感谢您的回复.我不应该急着发布这个问题,应该在提交之前重新阅读.已经晚了,我赶时间.我很抱歉.
通过实际看到我的错误语句(使用数组而不是对象)我认为,基于我重新形成的问题的答案,我可能需要重写我的代码以使用数组而不是对象.我使用对象而不是数组的原因是另一个问题的材料.

到目前为止,
我已经尝试找到一种方法将属性名称转换为数组,然后循环遍历它们,但这已经证明了这一点.我正在寻找一种不易出错且优雅的方式.

Nic*_*ick 10

编辑:啊哈!现在问题变得更加有趣了.

解决方案1:让我们一次性解决这个问题,好吗?最多:

function maxIndex(obj){
    var max = -1;
    for(var i in myObject){
        var val = parseInt(i);
        if(isFinite(val)){
            if(typeof obj[val] !== 'undefined' && val > max){
                max = val;
            }
        }
    }
    return max;
}
Run Code Online (Sandbox Code Playgroud)

我想你可以自己将它转换为min;)

解决方案2:在这里,我将您的对象重新置于我们原先的想法中,以防您真正喜欢其他解决方案之一.然后其余的答案适用.

function convertObject(obj){
    var output = [];
    for(var i in myObject){
        var val = parseInt(i);
        if(isFinite(val)){         
            output[val] = obj[i]; //Gotta love JS
        }
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

按计划继续!


要找到最小的,从底部开始,一直向上,直到找到它为止.

function minIndex(myArray){
    for(var i = 0; i < myArray.length; i++){
        if(typeof myArray[i] !== 'undefined')
            return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了获得最大,从顶部开始.

function maxIndex(myArray){
    for(var i = myArray.length - 1; i >= 0; i--){
        if(typeof myArray[i] !== 'undefined')
            return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都是最坏的情况O(n).你不能真的做得更好,因为整个数组可能是空的,你必须检查每个元素是否为正.

编辑:正如所提到的,你也可以看一看是不是通过简单地写不确定if(myArray[i]).无论你喜欢什么.

  • `null == undefined` ...我不明白为什么人们不会简单地使用`typeof x =='undefined'`,这是一种经过验证的方法来测试`undefined`. (3认同)