无法读取属性'推送'未定义的

时间:2017-11-15 09:45:36

标签: javascript jquery

我无法读取undefined的推送属性。为什么不定义?当我console.log(columnsArray[i])时,它会向我展示价值。我不明白。

var columnsArray = ["col1","col2","col3"];
var indexArray = [];
function submitIndex() {
  for (var i = 0; i <= columnsArray.length ; i++) {
    if ($("#" + columnsArray[i]).is(":checked") === true) {
      indexArray.push(columnsArray[i]); 
    } else {
      console.log(columnsArray[i] + "is not checked");
    }
  } 
  var indexArray = indexArray.filter(onlyUnique);
  console.log(indexArray);
}

2 个答案:

答案 0 :(得分:1)

<强>问题:

在行中:

function getdata($user_id){
  $this->db->select("products.*,users.*"); 
  $this->db->from('products');
  $this->db->join('users','users.user_id = products.user_id','left');
  $this->db->where('users.user_id', $user_id);
  $query = $this->db->get();
  return $query->result();
 } 

您试图在循环之前已声明var indexArray = indexArray.filter(onlyUnique); 变量之后重新声明该变量。

它将导致变量被提升,因此循环前的第一个声明将被忽略,因此indexArray将在循环内indexArray。 有关详细信息,请查看Hoistingvar keyword MDN参考资料。

<强>解决方案:

要解决此问题,您需要删除此行中的undefined关键字:

var

答案 1 :(得分:0)

请在此处查看我的小提示,以便复制error,然后查看solution here

需要注意的是这些

var columnsArray = ["col1","col2","col3"];
var indexArray = [];
function submitIndex(indexArray) {
  for (var i = 0; i < columnsArray.length ; i++) //you dont need to go till 
  columnsArray length as this is 0 based indexed array not 1 so removed = 
  from here
  {
 console.log('i='+i+' and columnsArray[i]='+columnsArray[i]);
  if ($("#" + columnsArray[i]).is(":checked") === true) {
     indexArray.push(columnsArray[i]); 
   } else {
     console.log(columnsArray[i] + "is not checked");
   }
  } 
 // var indexArray = indexArray.filter(onlyUnique); I dont have onlyUnique 
 filter so commented out
 console.log(indexArray);
 }
 submitIndex(indexArray);
  1. 您需要将数组迭代到length-1,这样就可以删除数组.length的相等比较
  2. 将参数传递给函数并使用它会更清晰,您也可以使用其他复选框执行此操作
  3. 不确定您的onlyUnique过滤器如此注释,但您应该可以使用它
  4. 不要再使用var声明变量来再次声明数组,而是将过滤后的结果放在另一个数组中并返回该数组。