按顺序获取JSON值并保持相应名称的顺序
Getting JSON values by order and keeping the corresponding names in order
我目前有一些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数据中都对应相同的索引,那就太好了。我想,一个包含对象和值排序的巨大数组也可以。
您可以先按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);
为什么不直接对实际对象进行排序?
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);
您还可以使用"lodash"或"下划线"按"solved"对数据进行排序,只需一行代码:
var data = {"data": [{"student_id": "bobby", "solved": 19}, {"student_id": "smith", "solved": 20}]}
var sorted = _.sortBy(data["data"],['solved']);
参见https://lodash.com/docs#sortBy
要将所有数据排序并保存在一个数组中,您可以创建一个对象,并通过在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
值更容易配对。当使用多个数组时,更容易使索引彼此不匹配。但没有什么能阻止你使用不止一个。
使用小型可重复使用的一行
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);
相关文章:
- Mongodb$in以与数组中相同的顺序获取结果
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 获取项目的顺序 jQuery 可排序并设置它们的顺序
- javascript:按实际顺序获取对象项
- Javascript:for loop获取数据,但顺序被破坏了
- 谷歌浏览器同步存储“获取”命令运行什么顺序
- 如何获取按字母顺序排序的标记
- 如何在 visjs 时间轴中按时间顺序获取 getVisibleItems(或如何获取上一项)
- 按可排序顺序获取所有文本区域内容
- 如何按排序键顺序获取对象中的最后一项
- 是否可以按当前排序顺序获取跨多个页面的所有 jqGrid 行
- Twitter iframe和其他JavaScript获取前者内容的执行顺序
- 如何使用 Jquery 获取 XML 文件,并在每次加载时以随机顺序显示元素一次
- 使用Node.JS,如何按时间顺序获取文件列表
- 如何按顺序获取所有元素文本
- 通过要按顺序获取的键列表获取嵌套键
- 在ExpressJS中按顺序获取req.params
- 从multiupload字段中按添加顺序获取图像
- Javascript -如何在数据模型中按键的顺序获取键
- 按顺序获取JSON值并保持相应名称的顺序