【问题标题】:JavaScript creating array with input name and valuesJavaScript 使用输入名称和值创建数组
【发布时间】:2015-05-28 05:39:52
【问题描述】:

我正在制定这个问题: 是否可以根据所有输入类型文本中使用的.name.value 数据自动创建一个数组?

这是手动做的参考:

var foo = [];
foo['bar'] = 'foo data';
foo['foo'] = 'bar data';

我有这个想法......而且它有效......

var foo[];
for (var i = 0; i < document.getElementsByTagName('input').length; i++)
{
    foo[document.getElementsByTagName("input")[i].name] = document.getElementsByTagName("input")[i].value;
};

任务是让它自动运行。 获取输入的.name 并获取该输入的.value

我正在编辑问题以将其发布在这里...当我弄清楚如何制作它时。我决定把参考留在这里,我猜它对某人有用。

欢迎反馈。

【问题讨论】:

  • @adeneo 在 JavaScript 数组中对象
  • 不,在 JavaScript 中数组是数组,属于 type 对象。
  • 当您在第一个循环中已经拥有该信息时,创建另一个数组有什么意义?
  • 您可能需要重新表述您的问题。你想创建一个 Array 对象(数组是 JS 中的特殊对象)还是你只是想要一个带有键/值对的对象。您的示例看起来像一个带有键/值对的对象。也很高兴知道你的目标是什么。您的想法可能很好,但也许您正在尝试重新发明轮子?知道它应该把你带到哪里会很有帮助。
  • 我的想法是通过 AJAX 将数组传递给 PHP...我将使用 foreach 创建变量,然后创建一个 SQL 语句插入到数据库中。

标签: javascript arrays input


【解决方案1】:

你的代码足够合理,除了两点:

  • 使用对象而不是数组。
  • 只创建一次输入列表。

所以你可以这样做:

var values = {};
var inputs = document.getElementsByTagName('input');
for( var i = 0; i < inputs.length; i++ ) {
    values[inputs[i].name] = inputs[i].value;
}

【讨论】:

  • 使用Array对象的对象实例有什么区别?
  • 虽然您可以为此使用数组并且它会起作用,但这不是数组的预期用途。当您要使用数字索引时,应该使用数组,而不是作为键值存储。由于您来自 PHP,您可能已经习惯了同时满足这两个目的的单一“关联数组”类型。但是 JavaScript 有一个与 Array 类型不同的 Object 类型,所以当你需要 key-value 存储时习惯使用它。
  • 另请注意,许多 JavaScript 数据类型是从 Object 派生的,或者可以像对象一样使用。例如,函数也是一个对象,并且可以为其分配属性。所以你可以说var values = function() {};,剩下的代码仍然可以工作!但是任何阅读您的代码的人都会摸不着头脑,想知道“为什么这是一个函数?看起来您只是将它用作一个对象。”当您应该使用对象时,使用数组也是如此。
  • 谢谢@Michael Geary,这是一个很好的教训,你让我开心,谢谢。
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多