【问题标题】:how to create a multidimensional array in javascript / jquery?如何在 javascript/jquery 中创建多维数组?
【发布时间】:2012-10-29 04:41:27
【问题描述】:

我有几个:

<ul>
    <li class="one">
        <input type="text" class="form_input" placeholder="Type something...">
    </li>
    <li class="two">
        <input type="text" class="form_input" placeholder="Type something else...">
    </li>
</ul>

我正在尝试创建一个类似于以下内容的数组:

[
    0[
        'placeholder' : 'Type something...'
    ]
    1[
        'placeholder' : 'Type something else...'
    ]
]

我使用这样的方法

var lineText = function(elements) {
var myData = new Array();

elements.each(function(index, data) {
    var li = $(this);

    myData["placeholder"] = li.find('.form_input').attr("placeholder");

            console.log(data); returns the li objects
});

console.log(myData);
};

由此我得到[placeholder: "Type something..."],基本上是我的数组中的一项,而不是 2

我不能像这样使用push

myData["placeholder"].push(li.find('.form_input').attr("placeholder")); //Cannot call method 'push' of undefined 

或向数组添加另一个维度

myData[index]["placeholder"] = li.find('.form_input').attr("placeholder"); //Cannot set property 'placeholder' of undefined 

有什么想法吗?谢谢

【问题讨论】:

  • 您希望对象作为数组的元素吗?还是包含字符串的数组?
  • 我不想要对象,我只想要占位符,在这种情况下,或者我想要作为值传递的任何东西。在这种情况下,对象是我的data
  • 你是这个意思? jsfiddle.net/vU36T
  • 一个数组不能有像“占位符”这样的字符串键——你可以考虑将 myData 改为一个对象。例如 var myData = {} 而不是 var myData = [] ( new Array() ) -- 然后像 myData["placeholder"][index] = ... 一样添加它
  • 你需要多维数组吗?是否有比“占位符”更多的属性要添加到数组中?我假设是的,在这种情况下,您想要更多类似 jsfiddle.net/vU36T/2 的东西,它使用对象。在 JavaScript 中,对象可以像关联数组一样发挥作用。

标签: javascript jquery arrays multidimensional-array each


【解决方案1】:

这应该可行:

var placeholders = [];
$('ul > li > input').each( function(index, el){ placeholders.push(el.placeholder); } );

这将产生 ["Type something...", "Type something else..."]

您遇到错误的原因是您试图使用对象语法访问数组。 Javascript 数组只能有数字键...但是 javascript 中的所有内容都是一个对象,这就是为什么 myData['placeholders'] 显示为“未定义”而不是硬错误的原因。它所做的是检查数组原型链中的方法或属性“占位符”,而不是数组 myData 中的键“占位符”。

【讨论】:

    【解决方案2】:

    听起来你想要一个“关联数组”的数组。在 JavaScript 而不是关联数组中,您可以使对象的行为方式相同。这意味着您上面的数组在文字语法中看起来像这样。

    var a = [ { 'placeholder': 'Type something...' },
              { 'placeholder': 'Type something else...' } ];
    

    a[ 0 ][ 'placeholder' ] 将返回字符串 'Type something...'。由于这使用对象,因此无法推送属性,因为它们需要一些键。相反,你会写类似a.push( { 'placeholder': 'Type more stuff...' } )

    如果您只打算在数组中添加占位符,则无需使用对象,只需像这样创建一个字符串数组。

    var placeholders = [ 'Type something...', 'Type something else...' ];
    

    但是当使用我的第一个解决方案时,你的功能会变成

    var lineText = function(elements) {
        var myData = new Array();
    
        elements.each(function(index, data) {
            var li = $(this);
            var placeholderData = new Object();
    
            placeholderData["placeholder"] = li.find('.form_input').attr("placeholder");
            myData.push(placeholderData);
            console.log(data); returns the li objects
        });
    
        console.log(myData);
    };
    

    这里是现场示例http://jsfiddle.net/vU36T/6/

    【讨论】:

      猜你喜欢
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2014-03-02
      • 2011-05-19
      • 2012-03-21
      • 2012-02-18
      • 2019-10-31
      相关资源
      最近更新 更多