我正在寻找一种方法来对我的三个主要JSON密钥(neutral
,positive
,negative
)进行排序,使用他们的孩子y
- 密钥'值。
这是JSON对象的设置方式:
{
"chartSeries" : {
"negative" : [ {
"y" : 1505,
"url" : "http://www.test.com/1"
}, {
"y" : 425,
"url" : "http://www.test.com/2"
}, {
"y" : 1046,
"url" : "http://www.test.com/3"
} ],
"neutral" : [ {
"y" : 10,
"url" : "http://www.test.com/4"
}, {
"y" : 1,
"url" : "http://www.test.com/5"
}, {
"y" : 2,
"url" : "http://www.test.com/6"
} ],
"positive" : [ {
"y" : 230,
"url" : "http://www.test.com/7"
}, {
"y" : 50,
"url" : "http://www.test.com/8"
}, {
"y" : 483,
"url" : "http://www.test.com/9"
} ]
}
}
假设我想按negative
的值降序y
值,那么我的JSON应如下所示:
{
"chartSeries" : {
"negative" : [ {
"y" : 1505,
"url" : "http://www.test.com/1"
}, {
"y" : 1046,
"url" : "http://www.test.com/3"
}, {
"y" : 425,
"url" : "http://www.test.com/2"
} ],
"neutral" : [ {
"y" : 10,
"url" : "http://www.test.com/4"
}, {
"y" : 2,
"url" : "http://www.test.com/6"
}, {
"y" : 1,
"url" : "http://www.test.com/5"
} ],
"positive" : [ {
"y" : 230,
"url" : "http://www.test.com/7"
}, {
"y" : 483,
"url" : "http://www.test.com/9"
}, {
"y" : 50,
"url" : "http://www.test.com/8"
} ]
}
}
注意负面元素如何按其降序y值和中性点排序'和积极的'值按照相同的顺序排序。
我尝试使用JSON.parse()
将其解析为Javascript对象,然后使用排序函数:
function sortResults(data, prop, asc) {
sorted_data = data.sort(function(a, b) {
if (asc) return (a[prop] > b[prop]);
else return (b[prop] > a[prop]);
});
return sorted_data;
}
但我得到" TypeError:data.sort不是一个函数"在我的调试器中。
非常感谢任何解释或建议!
答案 0 :(得分:1)
不要忘记添加一个paseInt()以确保所有键都是整数。在那些日子里,我有很多有趣的时间搞清楚。
答案 1 :(得分:0)
我会坚持使用JSON.sortify(https://www.npmjs.com/package/json.sortify),因为它完全符合我的需要。
这个神奇功能背后的代码:
function sortKeys(o) {
if (Array.isArray(o)) {
return o.map(sortKeys)
} else if (o instanceof Object) {
var _ret = function() {
var numeric = [];
var nonNumeric = [];
Object.keys(o).forEach(function(key) {
if (/^(0|[1-9][0-9]*)$/.test(key)) {
numeric.push(+key)
} else {
nonNumeric.push(key)
}
});
return {
v: numeric.sort(function(a, b) {
return a - b
}).concat(nonNumeric.sort()).reduce(function(result, key) {
result[key] = sortKeys(o[key]);
return result
}, {})
}
}();
if (typeof _ret === "object") return _ret.v
}
return o
};
就是这样。