【问题标题】:How to structure javascript array如何构造javascript数组
【发布时间】:2018-10-04 09:59:27
【问题描述】:

我有一个动态表单,您可以在其中单击一个按钮,然后将一个新的表单行添加到表单中。表单条目如下所示:

<input type='text' class='custom' data-index='".$f."' name='column_value_one' value='1'>
<input type='text' class='custom' data-index='".$f."' name='column_value_two' value='2'>

例如,我添加了上面的 3 行,data-index 是 0 到 3。我尝试通过执行以下操作来处理它:

var data = [];
$(".custom").each(function() {
    var index = parseInt($(this).attr('data-index'));
    data[index][$(this).attr("name")] = $(this).val();
});

我正在尝试得到以下结果:

data[0]['column_value_one'] = 1;
data[0]['column_value_two'] = 2;
data[1]['column_value_one'] = 1;
data[1]['column_value_two'] = 2;

我通常只编写 PHP,因此我按照上面的方式布置数组。但这将是一个 Javascript/Jquery 数组而不是 PHP。

我会很感激这里的任何帮助。

【问题讨论】:

  • 我应该提到 $f 是由 PHP 循环生成的,因为每组两个都会有一个新的数据索引 id
  • 真正的问题是什么?似乎使用 map() 和父元素的实际 index() 可能是比从服务器输出每个元素中的静态值更好的解决方案。
  • 查找最后一个输入并在点击时添加最后一个输入的 +1 值
  • 它给了我响应Cannot set property 'column_value_one' of undefined

标签: javascript php jquery arrays


【解决方案1】:

如果索引不存在,则需要将data[index] 初始化为{}

data[index] = data[index] || {}; 

喜欢:

var data = [];
$(".custom").each(function() {
  var index = parseInt($(this).attr('data-index'));
  data[index] = data[index] || {}; 
  data[index][$(this).attr("name")] = $(this).val();
});

console.log(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' class='custom' data-index='0' name='column_value_one' value='1'>
<input type='text' class='custom' data-index='0' name='column_value_two' value='2'>
<input type='text' class='custom' data-index='1' name='column_value_one' value='1'>
<input type='text' class='custom' data-index='1' name='column_value_two' value='2'>
<input type='text' class='custom' data-index='2' name='column_value_one' value='1'>
<input type='text' class='custom' data-index='2' name='column_value_two' value='2'>

【讨论】:

  • 乐于助人:)
【解决方案2】:

听起来你想要一个对象数组:

data = [
    {column_value_one: 1, column_value_two: 2},
    // ...
];

在这种情况下,由于第二个输入在第一个之后,您可以这样做:

var data = $("input[name=column_value_one]").map(function() {
    return {column_value_one: this.value, column_value_two: $(this).next().val()};
}).get();

现场示例:

var data = $("input[name=column_value_one]").map(function() {
    return {column_value_one: this.value, column_value_two: $(this).next().val()};
}).get();

console.log(data);
<input type='text' class='custom' data-index='0' name='column_value_one' value='11'>
<input type='text' class='custom' data-index='0' name='column_value_two' value='12'>
<input type='text' class='custom' data-index='1' name='column_value_one' value='21'>
<input type='text' class='custom' data-index='1' name='column_value_two' value='22'>
<input type='text' class='custom' data-index='2' name='column_value_one' value='31'>
<input type='text' class='custom' data-index='2' name='column_value_two' value='32'>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

或者,如果您可能在它们之间有一些东西,请使用两个 jQuery 对象:

var ones = $("input[name=column_value_one]");
var twos = $("input[name=column_value_two]");
var data = ones.map(function(index) {
    return {column_value_one: this.value, column_value_two: twos.eq(index).val()};
}).get();

var ones = $("input[name=column_value_one]");
var twos = $("input[name=column_value_two]");
var data = ones.map(function(index) {
    return {column_value_one: this.value, column_value_two: twos.eq(index).val()};
}).get();

console.log(data);
<input type='text' class='custom' data-index='0' name='column_value_one' value='11'>
<input type='text' class='custom' data-index='0' name='column_value_two' value='12'>
<input type='text' class='custom' data-index='1' name='column_value_one' value='21'>
<input type='text' class='custom' data-index='1' name='column_value_two' value='22'>
<input type='text' class='custom' data-index='2' name='column_value_one' value='31'>
<input type='text' class='custom' data-index='2' name='column_value_two' value='32'>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

在这两种情况下,都不需要data-index(为此;也许您需要它来做其他事情)。

【讨论】:

  • 感谢 TJ,找到了解决方案。不过感谢您的回复。
  • @PatrickMcCarthy - 刚刚添加了第二个。 (除非你需要它来做其他事情,否则不需要data-index。)
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多