对象中的数组未定义JS

时间:2017-03-13 01:16:41

标签: javascript arrays json twig

我有这个对象的例子:

{
    "id": 1,
    "name": "name",
    "address": "add",
    "contactsArr": [{
        "id": 1,
        "name": "cont",
        "tel": "tel",
        "mail": "mail"
    }],
    "description": "desc"
}

此对象位于对象数组中,该数组称为arrSuppCompNames。我从数据库表中的JSON字符串中获取此数组。 这是我在contactsArr中获取最后一个对象id的函数:

function getLastIdFromArrContUser(){
  if("{{user.supplier_comp_name}}" != null && "{{user.supplier_comp_name}}" != "" && "{{user.supplier_comp_name}}" != 0){//not first
    var arrSuppCompNames = JSON.parse(("{{user.supplier_comp_name}}").replace(/"/g,'"'));
    console.log("arrSuppCompNames: " + JSON.stringify(arrSuppCompNames));
    return arrSuppCompNames[arrSuppCompNames.length - 1].contactsArr[contactsArr.length - 1].id;
  }else{//first
    return 0;
  }
}

但我在Uncaught ReferenceError: contactsArr is not defined这一行继续return arrSuppCompNames[arrSuppCompNames.length - 1].contactsArr[contactsArr.length - 1].id;。事情是我确定contactsArr存在于对象数组中,因为之前的日志打印只是一行。这是我的日志:

arrSuppCompNames: [{"id":1,"name":"name","address":"add","contactsArr":[{"id":1,"name":"cont","tel":"tel","mail":"mail"}],"description":"desc"}]

不知道这只是一个愚蠢的JS错误或错误类型我看不到或更多JSON相关。

3 个答案:

答案 0 :(得分:1)

您尝试访问索引[contactsArr.length - 1]但在此上下文中未定义contactsArr。考虑:

var contactsArr = arrSuppCompNames[arrSuppCompNames.length - 1].contactsArr;
return contactsArr[contactsArr.length - 1].id;

答案 1 :(得分:0)

根据您的示例,我认为您不需要在contactsArr上指定索引。它应该是return arrSuppCompNames[arrSuppCompNames.length - 1].contactsArr.id;

答案 2 :(得分:0)

您可以使用销毁赋值来获取包含"contactsArr"属性的"id"属性值数组



var arrSuppCompNames = [{
    "id": 2,
    "name": "name",
    "address": "add",
    "contactsArr": [{
      "id": 2,
      "name": "cont",
      "tel": "tel",
      "mail": "mail"
    }],
    "description": "desc"
  },
  {
    "id": 1,
    "name": "name",
    "address": "add",
    "contactsArr": [{
      "id": 1,
      "name": "cont",
      "tel": "tel",
      "mail": "mail"
    }],
    "description": "desc"
  }
]

var {contactsArr: [{id}]} = arrSuppCompNames[arrSuppCompNames.length - 1];
console.log(id);