多字段排序的Javascript代码缩减
我有一个数组,其数据与此类似,但有更多字段可供排序:多字段排序的Javascript代码缩减,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个数组,其数据与此类似,但有更多字段可供排序: const shirts= [ { type: "T-shirt", size: "L", color: "Black", }, { type: "Dress Shirt", size: "S", color: "Brown",
const shirts= [
{
type: "T-shirt",
size: "L",
color: "Black",
},
{
type: "Dress Shirt",
size: "S",
color: "Brown",
},
{
type: "Sweatshirt",
size: "M",
color: "Red",
},
{
type: "Polo",
size: "XS",
color: "Pink",
},
...]
我有一个排序函数,它根据所选内容的不同而工作,例如,如果用户按大小排序,它需要从XS到XL,但任何其他选项都需要按字母顺序排序。这就是我所拥有的:
//sort is the option the user decided to sort by
SortedShirts(sort,shirts){
var newShirtArray=[];
var size1=0;
var size2=0;
if(sort === "type"){
newShirtArray= shirts.sort(function(shirt1,shirt2){
if (shirt1.type> shirt2.type){
return 1;
}
else{
return -1;
}
});
}
else if(sort === "color"){
newShirtArray = shirts.sort(function(shirt1,shirt2){
if (shirt1.color > shirt2.color){
return 1;
}
else{
return -1;
}
});
}
else if(sort === "size"){
newShirtArray = shirts.sort(function(shirt1,shirt2){
if(shirt1.size==="XS"){
size1=0;
}
else if(shirt1.size==="S"){
size1=1;
}
else if(shirt1.size==="M"){
size1=2;
}
else if(shirt1.size==="L"){
size1=3;
}
else if(shirt1.size==="XL"){
size1=4;
}
if(shirt2.size==="XS"){
size2=0;
}
else if(shirt2.size==="S"){
size2=1;
}
else if(shirt2.size==="M"){
size2=2;
}
else if(shirt2.size==="L"){
size2=3;
}
else if(shirt2.size==="XL"){
size2=4;
}
if (size1 > size2){
return 1;
}
else{
return -1;
}
});
}
这对我来说似乎是重复的,因为类型和颜色排序方式相同,只是有一个不同的字段,我觉得我可以把它放在一个排序中,但我不确定如何做。我想知道是否有这样的事情
if(sort === "type" || sort === "color"){
newShirtArray= shirts.sort(function(shirt1,shirt2){
if (shirt1.fieldOf(sort) > shirt2.fieldOf(sort)){
return 1;
}
else{
return -1;
}
});
}
还是另一种减少代码的方法?您可以使用括号访问JSON对象的密钥
const shirts = [
{
type: "T-shirt",
size: "L",
color: "Black",
},
{
type: "Dress Shirt",
size: "S",
color: "Brown",
},
{
type: "Sweatshirt",
size: "M",
color: "Red",
},
{
type: "Polo",
size: "XS",
color: "Pink",
},
]
function SortedShirts(sort, shirts) {
var newShirtArray = [];
var size1 = 0;
var size2 = 0;
if (sort === "type" || sort === "color") {
newShirtArray = shirts.sort(function (shirt1, shirt2) {
if (shirt1[sort] > shirt2[sort]) {
return 1;
}
else {
return -1;
}
});
}
else if (sort === "size") {
const sizes = ['XS', 'S', 'M', 'L', 'XL']
newShirtArray = shirts.sort(function (shirt1, shirt2) {
const size1 = sizes.indexOf(shirt1.size)
const size2 = sizes.indexOf(shirt2.size)
if (size1 > size2) {
return 1;
}
else {
return -1;
}
});
}
}
您可以使用括号访问JSON对象的密钥
const shirts = [
{
type: "T-shirt",
size: "L",
color: "Black",
},
{
type: "Dress Shirt",
size: "S",
color: "Brown",
},
{
type: "Sweatshirt",
size: "M",
color: "Red",
},
{
type: "Polo",
size: "XS",
color: "Pink",
},
]
function SortedShirts(sort, shirts) {
var newShirtArray = [];
var size1 = 0;
var size2 = 0;
if (sort === "type" || sort === "color") {
newShirtArray = shirts.sort(function (shirt1, shirt2) {
if (shirt1[sort] > shirt2[sort]) {
return 1;
}
else {
return -1;
}
});
}
else if (sort === "size") {
const sizes = ['XS', 'S', 'M', 'L', 'XL']
newShirtArray = shirts.sort(function (shirt1, shirt2) {
const size1 = sizes.indexOf(shirt1.size)
const size2 = sizes.indexOf(shirt2.size)
if (size1 > size2) {
return 1;
}
else {
return -1;
}
});
}
}
开关
语句:开关(排序){
案例“颜色”:
案例“类型”:
newshirtaray=shirts.sort(/*…*/);
打破
案例“大小”:
newshirtaray=shirts.sort(/*…*/);
打破
}
const衬衫尺寸={
XS:0,S:1,M:2,L:3,XL:4,
};
const shirt1Size=shirtsize[shirt1.size];
案例“大小”:
newshirtaray=shirts.sort((s1,s2)=>ShirtSizes[s1.size]-ShirtSizes[s2.size]);
打破
类型
和颜色
,正如您所猜测的,您可以使用:case'color':
案例“类型”:
newShirtArray=shirts.sort((s1,s2)=>{
如果(s1[排序]>s2[排序]){
返回1;
}else if(s1[排序]
我希望这会有所帮助
开关
语句:开关(排序){
案例“颜色”:
案例“类型”:
newshirtaray=shirts.sort(/*…*/);
打破
案例“大小”:
newshirtaray=shirts.sort(/*…*/);
打破
}
const衬衫尺寸={
XS:0,S:1,M:2,L:3,XL:4,
};
const shirt1Size=shirtsize[shirt1.size];
案例“大小”:
newshirtaray=shirts.sort((s1,s2)=>ShirtSizes[s1.size]-ShirtSizes[s2.size]);
打破
类型
和颜色
,正如您所猜测的,您可以使用:case'color':
案例“类型”:
newShirtArray=shirts.sort((s1,s2)=>{
如果(s1[排序]>s2[排序]){
返回1;
}else if(s1[排序]
我希望这会有所帮助。类型和颜色的顺序是什么?只是它们的字典顺序吗?类型和颜色的顺序是什么?只是它们的字典顺序吗?