推入对象jquery数组但仅在一个对象中

时间:2017-05-29 09:59:42

标签: javascript jquery arrays



var months_range = [];
var obj = {};
obj['weather'] = "winter";
$('input').each(function(index, obj) {
  var id = $(this).attr('id');
  obj[id] = $(this).val();
  months_range.push(
    obj
  );
});

console.log(JSON.stringify(months_range));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='jan' value='1' />

<input type='text' id='feb' value='2' />
&#13;
&#13;
&#13;

我想在我的数组中只添加一个对象,它将包含我想在数组中拥有的所有数据。

我想输出的是:

  

[{&#34;一月&#34;:&#34; 1&#34;&#34;二月&#34;:&#34; 2&#34;&#34;天气&#34 ;: &#34;冬季&#34;}]

我得到的是

  

[{&#34;扬&#34;:&#34; 1&#34;},{&#34;二月&#34;:&#34; 2&#34;}]

4 个答案:

答案 0 :(得分:2)

obj中的内部each参数会覆盖外部obj变量。当您不使用它时,您可以删除参数。

var months_range = [];
var obj = {};
obj['weather'] = "winter";
$('input').each(function(index) {
  var id = $(this).attr('id');
  obj[id] = $(this).val();
  months_range.push(
    obj
  );
});

console.log(JSON.stringify(months_range));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='jan' value='1' />

<input type='text' id='feb' value='2' />

如果最后只需要数组中的单个对象,只需在每个语句后将数据推送到数组中,如下所示:

var months_range = [];
var obj = {};
obj['weather'] = "winter";
$('input').each(function(index) {
  var id = $(this).attr('id');
  obj[id] = $(this).val();
});

months_range.push(obj);

console.log(JSON.stringify(months_range));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='jan' value='1' />

<input type='text' id='feb' value='2' />

答案 1 :(得分:1)

你使用函数参数obj来遮蔽,考虑覆盖你的外部obj变量,这使得push操作在每次迭代的新对象中进行推送。重命名外部变量或函数参数,它会稍微有效。

此外,您每次迭代都会将对象推送到数组,最终会为您提供一个包含重复对象的N长度数组,将push移出循环。< / p>

var months_range = [];
var monthsObj = {}; //Previously `obj`.
monthsObj['weather'] = "winter";
$('input').each(function(index, obj) {
  var id = $(this).attr('id');
  monthsObj[id] = $(this).val();

});
months_range.push(
  monthsObj
);

答案 2 :(得分:0)

obj移除function(index, obj),使其看起来像function(index)

months_range.push(obj);移出.each

var months_range = [];
var obj = {};
$('input').each(function(index) {
  var id = $(this).attr('id');
  obj[id] = $(this).val();
});
obj['weather'] = "winter";
months_range.push(
  obj
);

console.log(JSON.stringify(months_range));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='jan' value='1' />

<input type='text' id='feb' value='2' />

答案 3 :(得分:0)

我真的不明白你的问题,但似乎给出了你想要的结果。

var obj = {};
obj["weather"] = "winter";

[].forEach.call(document.getElementsByTagName("input"), function(e){
  obj[e.id] = e.value;
});

console.log(obj);
<input type='text' id='jan' value='1' />

<input type='text' id='feb' value='2' />