【问题标题】:Assign values to an array within an array为数组中的数组赋值
【发布时间】:2015-02-18 20:34:52
【问题描述】:

我的项目的数据结构应该是这样的:

{
"result":"ok",
"content":[
    {
        "type":"1d",
        "lower":1359129600,
        "upper":1359133200,
        "mean":29.071428571428573

    },{
        "type":"1d",
        "lower":1359133200,
        "upper":1359136800,
        "mean":27.232142857142858
    }]
}

我正在尝试为较低、较高、平均值分配值。

var dataResult = {result:"ok", content:[{type:"1d", lower:"", upper:"", mean:""}]};
var scope = this;
  $.ajax({
    type: "POST",
    async: true,
    url: scope.fetchUrl,
    data: { query: dataQuery }
    })
    .done(function( data ) {
      for(var i = 0; i < data["reading_list"].length; i++){
        dataResult.content[i].lower = convertToUnix(data["reading_list"][i]["ts"]);
      }

我不断收到“Uncaught TypeError: Cannot set property 'lower' of undefined”,我不知道我哪里出错了。任何帮助将不胜感激

【问题讨论】:

  • 错误表示dataResult.content[i]返回undefined。您不能在undefined 上设置属性。简单测试:var foo; foo.bar = 42;。为什么是undefined?因为i 的值不是dataResult.content 的属性。

标签: javascript arrays variable-assignment


【解决方案1】:

您的“内容”数组开始时只有一个对象。如果您的 ajax 结果不止于此,那么这些数组条目将是 undefined

在尝试进行赋值之前,只需确保数组元素中有一个对象:

    if (!dataResult.content[i])
      dataResult.content[i] = {};
    dataResult.content[i].lower = convertToUnix(data["reading_list"][i]["ts"]);

【讨论】:

  • 错误不再存在,但是当我 console.log dataResult.content.lower 查看输出时,它显示未定义。
  • @user2100620 dataResult.content 是整个数组本身;您需要记录整个数组或数组的各个元素。数组没有“lower”属性,但单个元素有。
  • 谢谢!现在这一切都变得更有意义了
猜你喜欢
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2017-10-12
相关资源
最近更新 更多