I need to sort an array of nested objects. I wrote the following code but for some reasons it places the first element always in the returning array even if it should not.
orderedArray = () => {
let sortedArray = products
if(this.state.interests.design && this.state.interests.code && this.state.interests.business)
sortedArray.sort((a,b)=> (b.scores.quality-a.scores.quality))
else if(this.state.interests.design && this.state.interests.code)
sortedArray.sort((a,b) => (b.scores.quality*b.scores.relevancy.code*b.scores.relevancy.design/2)-(a.scores.quality*a.scores.relevancy.code*a.scores.relevancy.design/2))
else if(this.state.interests.design && this.state.interests.business)
sortedArray.sort((a,b) => (b.scores.quality*b.scores.relevancy.business*b.scores.relevancy.design/2)-(a.scores.quality*a.scores.relevancy.business*a.scores.relevancy.design/2))
else if(this.state.interests.business && this.state.interests.code)
sortedArray.sort((a,b) => (b.scores.quality*b.scores.relevancy.business*b.scores.relevancy.code/2)-(a.scores.quality*a.scores.relevancy.business*a.scores.relevancy.code/2))
else if(this.state.interests.business)
sortedArray.sort((a,b)=> (b.scores.quality*b.scores.relevancy.business-a.scores.quality*a.scores.relevancy.busines))
else if(this.state.interests.code)
sortedArray.sort((a,b)=> (b.scores.quality*b.scores.relevancy.code-a.scores.quality*a.scores.relevancy.code))
else if(this.state.interests.design)
sortedArray.sort((a,b)=> (b.scores.quality*b.scores.relevancy.design-a.scores.quality*a.scores.relevancy.design))
console.log(JSON.stringify(sortedArray))
return sortedArray
}
The idea is that if they selected design, business and code then the resulting array should be sorted by quality, otherwise my a mix of quality and the selected variables. Here is the data:
[
{
"name":"dasd",
"scores": {
"quality": 8,
"relevancy": {
"design": 3,
"code": 9,
"business": 5
}
},
{...}
}
{...}
]
Whereas this.state
is:
this.state = {
minutes: int,
interests: {
business: bool,
code: bool,
design: bool
}
}