通过Array(JavaScript,D3)按照给定的顺序对JSON进行排序
Sort JSON by a given order via Array (JavaScript, D3)
我想从表示名称/值列的数组中按特定顺序对JSON数组进行排序。例如:
data = [
{
First: "John",
Last: "Doe",
Age: 23
},
{
First: "Sue",
Last: "San",
Age: 13
},
{
First: "Kyle",
Last: "Wafer",
Age: 87
}
];
var sortBy = ["San", "Wafer", "Doe"];
所以我的输出是:
var newData = [
{
First: "Sue",
Last: "San",
Age: 13,
},
{
First: "Kyle",
Last: "Wafer",
Age: 87,
},
{
First: "John",
Last: "Doe",
Age: 23,
}
];
是否可以使用D3.js或基本JavaScript实现而不需要复杂的for循环?非常感谢。
您可以使用一个对象作为排序顺序,并根据这些值对其进行排序。
var data = [{ First: "John", Last: "Doe", Age: 23 }, { First: "Sue", Last: "San", Age: 13 }, { First: "Kyle", Last: "Wafer", Age: 87 }],
sortBy = ["San", "Wafer", "Doe"],
sortByObj = {};
sortBy.forEach(function (a, i) {
sortByObj[a] = i + 1;
});
data.sort(function (a, b) {
return (sortByObj[a.Last] || 0) - (sortByObj[b.Last] || 0);
});
console.log(data);
可以在数组上使用.sort()
方法,如下所示:
data.sort(function (a, b) {return sortBy.indexOf(a.Last) - sortBy.indexOf(b.Last)})
您可以使用sort和indexOf来获取位置,但这意味着在每次排序时都要进行内部循环来获取位置。
在不使用排序的情况下,您可以首先通过键对元素进行索引,然后在顺序上循环。
data = [
{
First: "John",
Last: "Doe",
Age: 23
},
{
First: "Sue",
Last: "San",
Age: 13
},
{
First: "Kyle",
Last: "Wafer",
Age: 87
}
];
var sortBy = ["San", "Wafer", "Doe"];
var temp = data.reduce( function(obj, item) {
obj[item.Last] = item;
return obj;
}, {});
var result = sortBy.map( function(key){ return temp[key]; });
console.log(result);
但这种技术失败的地方是两个键会被复制。为了解决这个问题,可以使用数组。
data = [
{
First: "John",
Last: "Doe",
Age: 23
},
{
First: "Jane",
Last: "Doe",
Age: 20
},
{
First: "Sue",
Last: "San",
Age: 13
},
{
First: "Kyle",
Last: "Wafer",
Age: 87
}
];
var sortBy = ["San", "Wafer", "Doe"];
var temp = data.reduce( function(obj, item) {
if(!obj[item.Last]) obj[item.Last]=[];
obj[item.Last].push(item);
return obj;
}, {});
var result = sortBy.reduce( function(arr, item){ return arr.concat(temp[item]); return arr }, []);
console.log(result);
我相信他们是一种更花哨的串联方式,但做得很快。
您应该根据实际数据运行一些性能测试,看看什么性能最好。
相关文章:
- 如何在php中按元素按字母顺序排列json文件
- 在学习JavaScript,Ajax,jQuery和JSON时是否与顺序相关
- Algo查找深度并在JSON数组中按顺序插入
- 如何根据不同排序顺序的多个值对json对象进行排序
- 使用Sencha's app.json来管理Javascript加载顺序和依赖关系
- JSON不保留顺序
- 循环遍历 json 对象并按顺序排序
- JavaScript/jQuery以相同的顺序解析JSON
- 按字母顺序对 JSON 对象进行排序
- 按字母顺序对 JSON(按特定元素)进行排序
- 当没有键/值关联时.js按角度的字母顺序对 json 数组进行排序
- 按顺序解析子元素中的 JSON
- jQuery在JSON抓取后按顺序淡入淡出图像
- 您能否按字母顺序对从 JSON 文件动态创建的 jQuery 列表进行排序
- JSON数组索引顺序
- 按顺序访问JSON信息
- 如何合并两个JSON对象数组-在Javascript/jQuery中删除重复项并保持顺序
- 按相反的顺序解析json列表
- 为什么JSON.stringify的显示顺序与遍历数组的顺序不同
- 完整日历不显示事件在相同的顺序在json中给出