2017-09-15 113 views
0

我将如何对以下数组进行排序,以便它首先按升序年份跨度和每年跨度应用排序,它首先按类型“简单”,然后“复杂”对它进行排序?我还需要数组中每个排序的开始索引和计数。所以在这种情况下。问题是数组可以是动态的,这意味着可以添加新的一年跨度。使用JQuery将对象数组按多个属性排序

var array = [ 
    {"name":"one", "year":"2017-2018", "type":"simple"}, 
    {"name":"two", "year":"2018-2019", "type":"complex"}, 
    {"name":"three", "year":"2017-2018", "type":"complex"}, 
    {"name":"four", "year":"2018-2019", "type":"complex"}, 
    {"name":"five", "year":"2018-2019", "type":"simple"}, 
    {"name":"six", "year":"2017-2018", "type":"simple"}, 
]; 

这里的输出是:

var array = [ 
    {"name":"one", "year":"2017-2018", "type":"simple"}, 
    {"name":"six", "year":"2017-2018", "type":"simple"}, 
    {"name":"three", "year":"2017-2018", "type":"complex"}, 
    {"name":"five", "year":"2018-2019", "type":"simple"}, 
    {"name":"two", "year":"2018-2019", "type":"complex"}, 
    {"name":"four", "year":"2018-2019", "type":"complex"}, 
]; 

//These need to be generated dynamically 
startIndex2017simple = 0; 
count2017simple = 2; 
startIndex2017complex = 2; 
count2017complex = 1; 
startIndex2018simple = 3; 
count2018simple = 1; 
startIndex2018complex = 4; 
count2018complex = 2; 

我至今只设法通过简单或复杂的,但不是年的跨度进行排序。

这里是我当前的代码(打字稿和反应):

props.items.forEach((item, index) => { 
    if(item.type=== "simple") 
     sorted.unshift(item); 
    else 
     sorted.push(item); 
}); 

this.simples = props.items.filter((item)=>{ 
    return item.type === "simple" 
}); 
this.complex= props.items.filter((item)=>{ 
    return item.type !== "complex" 
});  

我得到startIndex和利用simples和复杂的阵列计算性能。

+0

您能否请您显示您当前的排序逻辑。你只需要修改它,以便在'type'匹配的情况下按'year'排序。 –

+0

我没有添加它,因为它太静态,我觉得这是一个完全错误的方法。抱歉 – LeonidasFett

回答

1

@LeonidasFett,我有一个JavaScript逻辑,首先按年排序。在按类型排序之前,您可以将此即兴发挥到您的React中。

var testArray = [ 
    {"name":"one", "year":"2017-2018", "type":"simple"}, 
    {"name":"two", "year":"2018-2019", "type":"complex"}, 
    {"name":"three", "year":"2017-2018", "type":"complex"}, 
    {"name":"four", "year":"2018-2019", "type":"complex"}, 
    {"name":"five", "year":"2018-2019", "type":"simple"}, 
    {"name":"six", "year":"2017-2018", "type":"simple"} 
]; 

testArray.sort(function(a, b) { 
    return a.year.substring(0, 4) - b.year.substring(0, 4); 
}); 

记录的testArray到控制台现在将是:

[ 
{name: "one", year: "2017-2018", type: "simple"}, 
{name: "three", year: "2017-2018", type: "complex"}, 
{name: "six", year: "2017-2018", type: "simple"}, 
{name: "two", year: "2018-2019", type: "complex"}, 
{name: "four", year: "2018-2019", type: "complex"}, 
{name: "five", year: "2018-2019", type: "simple"} 
] 

然后你按类型。