按顺序获取JSON值并按顺序保留相应的名称

时间:2016-07-27 18:49:28

标签: javascript arrays json

我目前有一些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数据中的相同。我想,一个包含对象和值的巨大数组也可以。

5 个答案:

答案 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].solvednewData[3]['solved']

将数据保存在这样的单个数组中有助于更轻松地保持student_idsolved值彼此配对。使用多个数组时,更容易使索引彼此不匹配。但是没有什么可以阻止你使用多个。

答案 3 :(得分:1)

你也可以使用" lodash"或"下划线"通过"解决"对数据进行排序, 只需一行代码:



var data = {"data": [{"student_id": "bobby", "solved": 19}, {"student_id": "smith", "solved": 20}]}
var sorted = _.sortBy(data["data"],['solved']);




请参阅https://lodash.com/docs#sortBy

答案 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);