生成javascript对象数组失败

生成javascript对象数组失败,javascript,jquery,json,Javascript,Jquery,Json,我想制作这个 arr = [{ "name": "john", "tel": 123 }, { "name": "marry", "tel": 999 }]; 但我用下面的代码得到的只是一个数组 var arr = [{}]; $('button').click(function () { $.each($('.row'), function () { arr.name = $(this).find('li.name input').v

我想制作这个

arr = [{
    "name": "john",
    "tel": 123
}, {
    "name": "marry",
    "tel": 999
}];
但我用下面的代码得到的只是一个数组

var arr = [{}];

$('button').click(function () {
    $.each($('.row'), function () {
        arr.name = $(this).find('li.name input').val();
        arr.tell = $(this).find('li.tel input').val();
    });

    console.log(arr);
});
怎么了?

您在代码中所做的就是一遍又一遍地为数组实例上的相同两个属性赋值。您既没有在数组中创建您所说的想要的对象,也没有在数组中添加任何条目

要向数组添加内容,可以使用。要创建对象,可以使用

或者,您可以使用jQuery的
map
函数:

arr = $('.row').map(function() {
    return {
        name: $(this).find('li.name input').val(),
        tell: $(this).find('li.tel input').val()
    };
}).get(); // <== Note the .get() at the end

…创建一个包含一个空白对象的数组。您不需要空白对象,只需创建代码数组>代码> = []]/> >。
var arr = [];

$('button').click(function(){
   $.each($('.row'), function(){
       var obj={};
    obj.name = $(this).find('li.name input').val();
    obj.tell = $(this).find('li.tel input').val();
       arr.push(obj)
});

console.log(arr);
});

您需要将
推入阵列。这将在数组末尾添加新对象

var arr = [];
// Remove {} from array declaration

$('button').click(function () {
    $('.row').each(function () {
        // push object inside array
        arr.push({
            name: $(this).find('li.name input').val(),
            tell: $(this).find('li.tel input').val()
        });
    });

    console.log(arr);
});

演示:

您向阵列中添加的数据不正确

请尝试以下方法:

var arr=[];//不要在那里添加空对象。
$(“按钮”)。单击(函数(){
$.each($('.row'),函数(){
arr.push({
名称:$(this).find('li.name input').val(),
告诉:$(this.find('li.tel input').val()
});//将新元素添加到数组中,其中包含当前行的数据。
});
控制台日志(arr);
警报(JSON.stringify(arr));
});




  • 提交
    您需要推送数组中的值,而不是将其用作对象

    var temp = {
        name: $(this).find('li.name input').val(),
        temp: $(this).find('li.tel input').val()
    }
    
    arr.push(temp);
    

    只是好奇:为什么你链接到ecma国际定义,而不是像MDN这样更为用户友好的文档?@Cerbrus:一般来说,我更喜欢原始资料。不过,这几乎肯定会改变——ES6规范非常难阅读。啊,这是有道理的。现在看来还没有那么糟糕。
    var arr = [];
    // Remove {} from array declaration
    
    $('button').click(function () {
        $('.row').each(function () {
            // push object inside array
            arr.push({
                name: $(this).find('li.name input').val(),
                tell: $(this).find('li.tel input').val()
            });
        });
    
        console.log(arr);
    });
    
    var temp = {
        name: $(this).find('li.name input').val(),
        temp: $(this).find('li.tel input').val()
    }
    
    arr.push(temp);