![](/img/trans.png)
[英]How to sort a multidimensional array of objects by property value in javascript?
[英]How to sort javascript's array of objects by multiple property value
我有一个包含fYear
和FQtr
键的对象数组。 我的目标是按FQtr
键和fYear
排序。 你能帮忙吗?
const data = [
{ "fYear": "FY22 Q3", "FQtr": "W10"},
{ "fYear": "FY22 Q3", "FQtr": "W11"},
{ "fYear": "FY22 Q3", "FQtr": "W12"},
{ "fYear": "FY22 Q3", "FQtr": "W13"},
{ "fYear": "FY22 Q3", "FQtr": "W2"},
{ "fYear": "FY22 Q4", "FQtr": "W1"},
{ "fYear": "FY22 Q3", "FQtr": "W3"},
{ "fYear": "FY22 Q3", "FQtr": "W4"},
{ "fYear": "FY22 Q4", "FQtr": "W2"},
{ "fYear": "FY22 Q3", "FQtr": "W5"},
{ "fYear": "FY22 Q3", "FQtr": "W6"},
{ "fYear": "FY22 Q3", "FQtr": "W7"},
{ "fYear": "FY22 Q3", "FQtr": "W8"},
{ "fYear": "FY22 Q3", "FQtr": "W9"},
{ "fYear": "FY22 Q4", "FQtr": "W4"},
{ "fYear": "QTD", "FQtr": "QTD"},
{ "fYear": "FY22 Q4", "FQtr": "W3"}
]
const data = [
{ "fYear": "FY22 Q3", "FQtr": "W2"},
{ "fYear": "FY22 Q3", "FQtr": "W3"},
{ "fYear": "FY22 Q3", "FQtr": "W4"},
{ "fYear": "FY22 Q3", "FQtr": "W5"},
{ "fYear": "FY22 Q3", "FQtr": "W6"},
{ "fYear": "FY22 Q3", "FQtr": "W7"},
{ "fYear": "FY22 Q3", "FQtr": "W8"},
{ "fYear": "FY22 Q3", "FQtr": "W9"},
{ "fYear": "FY22 Q3", "FQtr": "W10"},
{ "fYear": "FY22 Q3", "FQtr": "W11"},
{ "fYear": "FY22 Q3", "FQtr": "W12"},
{ "fYear": "FY22 Q3", "FQtr": "W13"},
{ "fYear": "FY22 Q4", "FQtr": "W1"},
{ "fYear": "FY22 Q4", "FQtr": "W2"},
{ "fYear": "FY22 Q4", "FQtr": "W3"},
{ "fYear": "FY22 Q4", "FQtr": "W4"},
{ "fYear": "QTD", "FQtr": "QTD"}
]
function sortFQtr( a, b ) {
const [prevVal, nextVal] = [Number.parseInt(a.FQtr.substring(1)), Number.parseInt(b.FQtr.substring(1))];
if ( prevVal < nextVal ) return -1;
if ( prevVal > nextVal) return 1;
return 0;
}
// ["FY22 Q4", "FY22 Q3", "QTD"]
var fYears = data.map(value => value.fYear).filter( (value, index, _arr) => _arr.indexOf(value) == index);
将所有内容放在.sort
回调中。 当您正确比较FQtr
时,您还需要考虑相同 function 中的fYear
值。
localeCompare
将使这变得简单 - 按字典顺序,FY22 Q3 之后是 FY22 Q4,然后是 QTD。 按该差异排序 - 如果没有差异,则按 FQtr 属性排序,这也可以使用localeCompare
(使用数字选项)来完成。
const data = [ { "fYear": "FY22 Q3", "FQtr": "W10"}, { "fYear": "FY22 Q3", "FQtr": "W11"}, { "fYear": "FY22 Q3", "FQtr": "W12"}, { "fYear": "FY22 Q3", "FQtr": "W13"}, { "fYear": "FY22 Q3", "FQtr": "W2"}, { "fYear": "FY22 Q4", "FQtr": "W1"}, { "fYear": "FY22 Q3", "FQtr": "W3"}, { "fYear": "FY22 Q3", "FQtr": "W4"}, { "fYear": "FY22 Q4", "FQtr": "W2"}, { "fYear": "FY22 Q3", "FQtr": "W5"}, { "fYear": "FY22 Q3", "FQtr": "W6"}, { "fYear": "FY22 Q3", "FQtr": "W7"}, { "fYear": "FY22 Q3", "FQtr": "W8"}, { "fYear": "FY22 Q3", "FQtr": "W9"}, { "fYear": "FY22 Q4", "FQtr": "W4"}, { "fYear": "QTD", "FQtr": "QTD"}, { "fYear": "FY22 Q4", "FQtr": "W3"} ]; data.sort((a, b) => ( a.fYear.localeCompare(b.fYear) || a.FQtr.localeCompare(b.FQtr, 'en', { numeric: true }) )); console.log(data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.