javascript - 在 JSON 对象中排序数组给出 TypeError : Cannot read property 'sort' of undefined

标签 javascript jquery json sorting

我想在 javascript 中对一个对象进行排序。 我有这个 json:

var unsorted = {
    "2014": [
        {
            "title": "Book",
            "value": 10
        },
        {
            "title": "Cheese",
            "value": 2
        }
    ],
    "2015": [
        {
            "title": "Movie",
            "value": 9
        }
    ],
     "2016": [
        {
            "title": "Slay",
            "value": 90
        },
        {
            "title": "Back",
            "value": 22
        }
    ],
    "selected_year": 2015
};

所以我想把这些年里面的jsons按照值进行排序。 我试过这个:

var sorted = unsorted.items.sort(function(a, b) {return a.value - b.value});

alert.log(unsorted);
alert.log(sorted);

但问题是我有另一个字段不是 json "selected_year": 2015 并且它发出错误 TypeError: Cannot read property 'sort' of undefined

不知道怎么办? 这是我的 JSFIDDLE

更新: 我想对“年”内的数组进行排序,所以我得到了:

var sorted = {
        "2014": [
            {
              "title": "Cheese",
              "value": 2

            },
            {
              "title": "Book",
              "value": 10
            }
        ],
        "2015": [
            {
                "title": "Movie",
                "value": 9
            }
        ],
         "2016": [
             {
                 "title": "Back",
                 "value": 22
             },
            {
                "title": "Slay",
                "value": 90
            }

        ],
        "selected_year": 2015
    };

例如在排序后的“2014”里面我有:

"2014": [
        {
          "title": "Cheese",
          "value": 2

        },
        {
        "title": "Book",
        "value": 10
        }
    ]

最佳答案

您只能对数组属性进行排序:

var unsorted = {
    "2014": [
        {
            "title": "Book",
            "value": 10
        },
        {
            "title": "Cheese",
            "value": 2
        }
    ],
    "2015": [
        {
            "title": "Movie",
            "value": 9
        }
    ],
     "2016": [
        {
            "title": "Slay",
            "value": 90
        },
        {
            "title": "Back",
            "value": 22
        }
    ],
    "selected_year": 2015
};

var sorted = Object.assign({}, unsorted);  // Copy the unsorted object

Object.keys(sorted).forEach(key => {
  if (Array.isArray(sorted[key])) {
     sorted[key].sort((a, b) => a.value - b.value);
  }
})

console.log(sorted);

关于javascript - 在 JSON 对象中排序数组给出 TypeError : Cannot read property 'sort' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47750347/

相关文章:

javascript - 单击另一个切换 div 时将图标切换回 "i"元素到原始位置

javascript - IE8 : parseInt ('07' ) vs parseInt ('08' )

javascript - 如何以 0 秒启动 setInterval 函数但在给定时间内重复它?

JavaScript 编码和解码错误

asp.net - JSON.net linq无法使用where语句选择节点

java - 如何正确返回JsonObject? |带有Spring Boot的Json RPC-API

javascript - 为什么这些对象不相等?

javascript - Freshdesk - 超时后初始化

javascript - 遍历具有特定类的每个对象,对除触发事件的对象之外的所有对象执行一些 css

javascript - 小部件,从选项错误中调用函数?