Javascript 使用定义的顺序对数组排序

Javascript 使用定义的顺序对数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在尝试为谷歌图表格式化一些数据。我的初始数组相当大,包含相当多的数据。因此,我像这样使用reduce函数 const dataFormatted = this.graphData.grouping.reduce((acc, item, index) => { acc.push([item.category, item.average, this.columnOptions.colors[index], item.average]) return acc }, [

我正在尝试为谷歌图表格式化一些数据。我的初始数组相当大,包含相当多的数据。因此,我像这样使用reduce函数

const dataFormatted = this.graphData.grouping.reduce((acc, item, index) => {
    acc.push([item.category, item.average, this.columnOptions.colors[index], item.average])
    return acc
}, [
    ['category', 'average', { role: 'style' }, { role: 'annotation' }]
])
因此,当这项工作完成后,我将得到一个如下所示的数组

[
    ["category","average",{"role":"style"},{"role":"annotation"}],
    ["High",0.0511,"#487090",0.0511],
    ["Low",0.0177,"#EFCA08",0.0177],
    ["Medium",0.03,"#F08700",0.03],
    ["Very High",0.2797,"#FF595E",0.2797],
    ["Very Low",0.0096,"#00A6A6",0.0096]
]
第一行总是它是什么,这是谷歌图表。但是,这之后的行,我希望按以下顺序排列

const ordering = ['Very Low', 'Low', 'Medium', 'High', 'Very High']
所以我基本上需要数据格式化,以这样结束

[
    ["category","average",{"role":"style"},{"role":"annotation"}],
    ["Very Low",0.0096,"#00A6A6",0.0096]
    ["Low",0.0177,"#EFCA08",0.0177],
    ["Medium",0.03,"#F08700",0.03],
    ["High",0.0511,"#487090",0.0511],
    ["Very High",0.2797,"#FF595E",0.2797],
]
我尝试过不同的方法,包括检查reduce函数中的值,然后在
acc
上使用splice,但即使这样也似乎出了问题。我最近的尝试是

const ordering = ['Very Low', 'Low', 'Medium', 'High', 'Very High']
var itemsOrdered = []
for (var i = 0; i < ordering.length; i++) {
  if (dataFormatted.indexOf(ordering[i]) > -1) {
    itemsOrdered.push(ordering[i])
  }
}
console.log(itemsOrdered)
const ordering=[“非常低”、“低”、“中”、“高”、“非常高”]
var itemsOrdered=[]
对于(变量i=0;i-1){
itemsOrdered.push(订购[i])
}
}
console.log(项排序)
但是
itemsOrdered
然后打印出一个空数组。那么,以我所需要的方式订购此阵列的最佳方式是什么


谢谢

在提取值后,而不是在转换数组时,对数组进行排序,然后添加第一项:

const graphData = this.graphData.grouping.map(
    (item, index) => ([item.category, item.average, this.columnOptions.colors[index], item.average])
);
const ordering = ['Very Low', 'Low', 'Medium', 'High', 'Very High'];
graphData.sort((a, b) => ordering.indexOf(a[0]) - ordering.indexOf(b[0]));
const headers = ['category', 'average', { role: 'style' }, { role: 'annotation' }];
const output = [headers, ...graphData];

在提取值后(而不是转换时)对数组进行排序,然后添加第一项:

const graphData = this.graphData.grouping.map(
    (item, index) => ([item.category, item.average, this.columnOptions.colors[index], item.average])
);
const ordering = ['Very Low', 'Low', 'Medium', 'High', 'Very High'];
graphData.sort((a, b) => ordering.indexOf(a[0]) - ordering.indexOf(b[0]));
const headers = ['category', 'average', { role: 'style' }, { role: 'annotation' }];
const output = [headers, ...graphData];

您可以使用自己的顺序保留标题

const
数组=[“类别”、“平均值”、“角色”:“风格”}、{“角色”:“注释”}、“高”、“0.0511”、“487090”、“0.0511”、“低”、“0.0177”、“EFCA08”、“0.0177”、“中”、“0.03”、“F08700”、“0.03”、“非常高”、“0.2797”、“FF595E”、“0.2797”、“非常低”、“0.0096”、“00A6”、“0.0096],],
顺序={类别:1,‘非常低’:2,低:3,中:4,高:5,‘非常高’:6};
sort(([a],[b])=>order[a]-order[b]);
console.log(数组)

。作为控制台包装{max height:100%!important;top:0;}
您可以按自己的顺序保留标题

const
数组=[“类别”、“平均值”、“角色”:“风格”}、{“角色”:“注释”}、“高”、“0.0511”、“487090”、“0.0511”、“低”、“0.0177”、“EFCA08”、“0.0177”、“中”、“0.03”、“F08700”、“0.03”、“非常高”、“0.2797”、“FF595E”、“0.2797”、“非常低”、“0.0096”、“00A6”、“0.0096],],
顺序={类别:1,‘非常低’:2,低:3,中:4,高:5,‘非常高’:6};
sort(([a],[b])=>order[a]-order[b]);
console.log(数组)

作为控制台包装{max height:100%!important;top:0;}
谢谢,应该是const output=[headers,…graphData]?哦,当然,oopsThanks,它应该是const output=[headers,…graphData]?哦,当然,哦