Javascript TypeError:无法设置属性';数据标识';未定义的

Javascript TypeError:无法设置属性';数据标识';未定义的,javascript,jquery,Javascript,Jquery,我的js代码有一些问题,我不知道如何修复它 这是我的密码: $('#btn_valid').click(function(){ var data = new Array(); var data_id; var data_picture; var data_title; var data_p_picture; var data_p_title; var data_s_picture; var data_s_title;

我的js代码有一些问题,我不知道如何修复它 这是我的密码:

  $('#btn_valid').click(function(){

    var data = new Array();
    var data_id;
    var data_picture;
    var data_title;
    var data_p_picture;
    var data_p_title;
    var data_s_picture;
    var data_s_title;
    var data_reaction;
    var data_datetime;
    var i = 0;


    $('.cbx_ac:checked').each(function(){

      data_id = $(this).attr('data-id');
      data_picture = $(this).attr('data-picture');
      data_title= $(this).attr('data-title');
      data_p_picture = $(this).attr('data-p_picture');
      data_p_title = $(this).attr('data-p_title');
      data_s_picture = $(this).attr('data-s_picture');
      data_s_title = $(this).attr('data-s_title');
      data_reaction = $(this).attr('data-reaction');
      data_datetime = $(this).attr('data-datetime');

      console.log(data_id); // I Get a value here ( 2564115647_15498456665 )

      data[i]['data_id'] = data_id;  //Error here :  Uncaught TypeError: Cannot set property 'data_id' of undefined
      i++;

    })
    console.log(data);
  })
我得到这个错误,我试图设置数据[I]=[],但似乎不是解决方案:

Error here :  Uncaught TypeError: Cannot set property 'data_id' of undefined

问题是因为
数据[i]
未定义。因此,您试图将属性设置为
未定义
,因此出现错误

要解决此问题,您需要首先在
数据[i]
中创建一个对象,如下所示:

data[i] = {};
data[i]['data_id'] = data_id;
// and so on...
然而,值得注意的是,您可以大量简化此逻辑并使其干涸。当访问元素的
data()
方法时,它将返回对象中的所有属性。因此,只要属性名称与要创建的对象的属性名称匹配,就可以使用
map()

$('btn'u valid')。单击(函数(){
var data=$('.cbx_ac:checked').map(函数(){
返回$(this.data();
}).get();
控制台日志(数据);
})


测试
问题是因为
数据[i]
未定义。因此,您试图将属性设置为
未定义
,因此出现错误

要解决此问题,您需要首先在
数据[i]
中创建一个对象,如下所示:

data[i] = {};
data[i]['data_id'] = data_id;
// and so on...
然而,值得注意的是,您可以大量简化此逻辑并使其干涸。当访问元素的
data()
方法时,它将返回对象中的所有属性。因此,只要属性名称与要创建的对象的属性名称匹配,就可以使用
map()

$('btn'u valid')。单击(函数(){
var data=$('.cbx_ac:checked').map(函数(){
返回$(this.data();
}).get();
控制台日志(数据);
})


测试
您需要先将其设置为
映射

data[i] = new Map();
data[i]['data_id'] = data_id;

您需要先将其设置为
映射

data[i] = new Map();
data[i]['data_id'] = data_id;

由于数据[i]未定义为数组,因此出现错误

如果你定义

    data[i] = {}; 
在这之后,下面的陈述将起作用

    data[i]['data_id'] = data_id;

由于数据[i]未定义为数组,因此出现错误

如果你定义

    data[i] = {}; 
在这之后,下面的陈述将起作用

    data[i]['data_id'] = data_id;

数据[i]未定义,因此

只需更改

data[i] = {};
data[i]['data_id'] = data_id;
$('btn'u valid')。单击(函数(){
var data=新数组();
var数据;
var数据图;
var数据标题;
var数据图;
var数据标题;
var数据图;
var数据标题;
var数据与U反应;
var数据和日期时间;
var i=0;
$('.cbx_ac:checked')。每个(函数(){
data_id=$(this.attr('data-id');
data_picture=$(this.attr('data-picture');
data_title=$(this.attr('data-title');
data_p_picture=$(this.attr('data-p_picture');
data_p_title=$(this.attr('data-p_title');
data_s_picture=$(this.attr('data-s_picture');
data_s_title=$(this.attr('data-s_title');
data_reaction=$(this).attr('data-reaction');
data_datetime=$(this.attr('data-datetime');
console.log(data_id);//我在这里得到一个值(2564115647_15498456665)
数据[i]={};
data[i]['data\u id']=data\u id;//此处错误:未捕获类型错误:无法设置未定义的属性'data\u id'
i++;
})
控制台日志(数据);
})

数据[i]未定义,因此

只需更改

data[i] = {};
data[i]['data_id'] = data_id;
$('btn'u valid')。单击(函数(){
var data=新数组();
var数据;
var数据图;
var数据标题;
var数据图;
var数据标题;
var数据图;
var数据标题;
var数据与U反应;
var数据和日期时间;
var i=0;
$('.cbx_ac:checked')。每个(函数(){
data_id=$(this.attr('data-id');
data_picture=$(this.attr('data-picture');
data_title=$(this.attr('data-title');
data_p_picture=$(this.attr('data-p_picture');
data_p_title=$(this.attr('data-p_title');
data_s_picture=$(this.attr('data-s_picture');
data_s_title=$(this.attr('data-s_title');
data_reaction=$(this).attr('data-reaction');
data_datetime=$(this.attr('data-datetime');
console.log(data_id);//我在这里得到一个值(2564115647_15498456665)
数据[i]={};
data[i]['data\u id']=data\u id;//此处错误:未捕获类型错误:无法设置未定义的属性'data\u id'
i++;
})
控制台日志(数据);
})


如果在控制台中运行$('.cbx_ac:checked'),会得到什么?这不是将值分配给数组的正确方法。如果在控制台中运行$('.cbx_ac:checked'),会得到什么?这不是将值分配给数组的正确方法。