我目前有一些JSON数据,如下所示:
{"data": [
{"student_id": "bobby", "solved": 19},
{"student_id": "smith", "solved": 20}
]}
现在我正在做的是将解决的值推送到for循环中名为newData
的数组中,如下所示:
newData.push(data['data'][i].solved);
现在我使用此函数按值对它们进行排序:
newData.sort(function(a,b){
return a-b;
});
很好,现在我按顺序排列了一系列值。但是,如何检索与按顺序排序的这些值对应的名称?如果我可以拥有名称并在两个数组中求解,那将是很好的,但每个索引对应于原始JSON数据中的相同。我想,一个包含对象和值的巨大数组也可以。
答案 0 :(得分:2)
您可以先按solved
键对数据进行排序,然后使用map()
按排序顺序返回两个单独的结果数组。
var obj = {"data": [{"student_id": "bobby", "solved": 19}, {"student_id": "smith", "solved": 20}]}
var newData = obj.data.sort(function(a, b) {
return b.solved - a.solved;
});
var numbers = newData.map(e => e.solved);
var names = newData.map(e => e.student_id);
console.log(numbers);
console.log(names);

答案 1 :(得分:1)
为什么不对实际物体进行排序?
json.data.sort(function(a, b) {
return a.solved - b.solved;
});
现在你有了一个排序的对象数组。如果您想要最低学生,只需使用sorted[0].student_id
即可。您可以在下面看到它的工作原理:
var obj = {"data": [{"student_id": "bobby", "solved": 19}, {"student_id": "smith", "solved": 18}]};
console.log('Raw Data: ', obj.data);
var sorted = obj.data.sort(function(a,b){
return a.solved-b.solved;
});
console.log('Sorted: ', sorted);

答案 2 :(得分:1)
为了保持所有数据的排序并保存在一个数组中,您可以通过在for循环中执行类似的操作来创建一个对象并将其放入数组中:
newData.push({
student_id: data['data'][i].student_id,
solved: data['data'][i].solved
});
当你去排序时,你只需要改变排序功能:
newData.sort(function(a,b){
return a.solved - b.solved;
});
当您稍后访问该数组而不是使用newData[3]
时,只需将该行更改为newData[3].solved
或newData[3]['solved']
。
将数据保存在这样的单个数组中有助于更轻松地保持student_id
和solved
值彼此配对。使用多个数组时,更容易使索引彼此不匹配。但是没有什么可以阻止你使用多个。
答案 3 :(得分:1)
你也可以使用" lodash"或"下划线"通过"解决"对数据进行排序, 只需一行代码:
var data = {"data": [{"student_id": "bobby", "solved": 19}, {"student_id": "smith", "solved": 20}]}
var sorted = _.sortBy(data["data"],['solved']);

答案 4 :(得分:1)
使用小型可重复使用的单行
const {data} = {"data": [
{"student_id": "bobby", "solved": 19},
{"student_id": "smith", "solved": 20}
]};
const sortBy = (by,arr) => arr.slice().sort((a,b) => b[by] - a[by]);
const getProp = (prop,obj) => obj[prop];
const sortById = sortBy.bind(null, 'student_id');
const sortBySolved = sortBy.bind(null, 'solved');
const getId = getProp.bind(null, 'student_id');
const getSolved = getProp.bind(null, 'solved');
const sortedIds = sortById(data).map(getId);
const sortedSolutions = sortBySolved(data).map(getSolved);
console.log(sortedIds);
console.log(sortedSolutions);