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;
我想在我的数组中只添加一个对象,它将包含我想在数组中拥有的所有数据。
我想输出的是:
[{&#34;一月&#34;:&#34; 1&#34;&#34;二月&#34;:&#34; 2&#34;&#34;天气&#34 ;: &#34;冬季&#34;}]
我得到的是
[{&#34;扬&#34;:&#34; 1&#34;},{&#34;二月&#34;:&#34; 2&#34;}]
答案 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' />