【问题标题】:Accessing Javascript Array without using [] Brackets不使用 [] 括号访问 Javascript 数组
【发布时间】:2009-12-15 19:04:20
【问题描述】:

我正在尝试在方括号用于宏替换的环境中编写一些javascript,因此它们不能在脚本中正常使用。

如果我使用new Array() 将数组创建为对象,我可以使用 push() 和 pop() 来访问元素,但对于原生数组,我无法找到不使用括号来获取元素的方法.例如,从以下位置返回的数组:

var allElements = document.getElementsByTagName("*");

有没有办法将原生数组分配给 Array 对象,这样我就可以使用 push() 和 pop(),还是有其他方法可以进入?

【问题讨论】:

  • 有没有办法从宏环境中转义方括号?这似乎是最简单的方法。
  • 这些马可替代品将在哪里?会在外部包含的 javascript 文件中吗?
  • 这是一个 HTML 报告生成器,它真的不是为在这个 Javascript 中进行黑客攻击而设计的。我还刚刚发现它在我的 RegExp 中用~ 替换了|...叹息。感谢大家的帮助!

标签: javascript arrays


【解决方案1】:

是的,例如,您可以使用原型和切片方法(在 IE 中不起作用):

var index = 1;
Array.prototype.slice.call(allElements,index,index+1);

对于 IE,我能想到的唯一方法是将集合中的所有元素复制到数组中:

var newarr = new Array();
for(var i=0;i<allElements.length;i++){
    newarr.push(allElements[i]);
}

或者,您可以使用此功能(适用于 IE 和 Firefox):

window.atIndex = function(array,index){
    return eval("array" + String.fromCharCode(91) + String(index) + String.fromCharCode(93));
}

使用atIndex(allElements,0);获取任何物品

【讨论】:

  • 不能进入 IE,抱歉。 “错误:需要 JScript 对象”
【解决方案2】:

对于NodeList 集合,您可以使用.item()

var allElements = document.getElementsByTagName("*");
var firstItem = allElements.item(0);

来源:NodeList

【讨论】:

    【解决方案3】:
    arr = [1, 2, 3]; //just a dummy array, I assume you don't use square brackets to assign an array in your code
    el0 = arr.slice(0,1).pop(); //returns 0th element
    el1 = arr.slice(1,2).pop(); //returns 1st element
    ...
    

    这里没有 IE,但在 Firefox 中可以正常工作。

    【讨论】:

      【解决方案4】:

      首先,JavaScript 引擎会为您将文字转换为对象(它在幕后进行)

      var arr = [1,2,3];
      alert( arr.pop() );
      

      其次,要了解document.getElementsByTagName()的返回值不是数组。这是HTMLCollection

      【讨论】:

      • 投了反对票? 真的吗?。叹息。
      • 虽然它提供了准确的信息,但这个答案忽略了避免使用 [] 括号的要点(因此在回答问题时似乎没有用处)。
      • 不,它没有。我清楚地展示了如何在数组文字上使用数组对象方法。我只是注意到document.getElementsByTagName()的返回值不是一个数组,所以这些方法无论如何都不起作用。
      • 更不用说我链接到 HTMLCollection 的文档,它清楚地显示了可用的方法。
      • 感谢您指出它正在返回一个 HTMLCollection - 这确实有帮助!
      【解决方案5】:

      您可以定义一个插入 [] 大括号的宏。这也许是可能的。 :-)

      但是,我想知道您为什么仍然使用这种环境 - 即使记事本可能会更舒服。

      【讨论】:

        【解决方案6】:

        for 循环,您可以像
        for(var item in array){
        doStuff(item);
        }
        一样遍历集合

        你也可以使用 Jquery 的 makeArray 函数
        var newArray = $.makeArray(array);

        我假设您在您的环境中别无选择,方括号在大量编程语言中是很正常的事情。理想的解决方案是使用不限制您的编程的环境

        【讨论】:

          猜你喜欢
          • 2011-07-05
          • 2017-02-05
          相关资源
          最近更新 更多