【问题标题】:Get highest index key of Javascript array获取Javascript数组的最高索引键
【发布时间】:2015-09-24 15:12:46
【问题描述】:

我怎样才能得到这样的数组中的最高键:

foo[0] == undefined
foo[1] == "bar"
foo[2] == undefined
foo[3] == undefined
foo[4] == "bar"

foo.length 返回 2,所以如果我迭代 foo.length 次,我永远不会得到最后一个值。

或者有没有办法考虑未定义的值来计算数组?

【问题讨论】:

  • 可能会更好地找出漏洞存在的原因并管理干净的阵列。你在用delete吗?而不是splice()
  • 错误出现在我的代码中。

标签: javascript arrays key max


【解决方案1】:

我不确定为什么您的代码不起作用,.length 在我的示例中正确显示 5 的数组 here
但是,如果您根本不为特定索引设置值,则可以执行 this :

var foo = [];
foo[1] = "bar";
foo[4] = "bar";

//grab existing indexes that have values assigned
var indexes = foo.map(function(val, idx) { return idx; });
//get the last one, this + 1 is your real length
var realLength = indexes[indexes.length - 1] + 1;
console.log("Real length: ", realLength);
//iterate using for loop
for(var i=0; i<realLength; i++) {
    var val = foo[i];
    console.log(i, val);
}

【讨论】:

  • OP 未尝试分配值...正在显示数组中的漏洞。这就是长度为 2 的原因
  • 我没有使用== 来赋值,我只是举了一个值等于(==)的例子。 (比较)
  • 这很公平:)
  • 尝试只初始化那些有值的
  • 嗯,好的。嗯,这是可以理解的。根据 ES5,数组本质上是一个对象,其索引实现为整数属性。因此,如果您没有在特定索引上设置值,则该属性不存在,因此不会被迭代。
【解决方案2】:

最高调

var index = foo.lastIndexOf(foo.slice(-1)[0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多