0
我需要对嵌套对象数组进行排序。我写了下面的代码,但由于某些原因,它将第一个元素始终放在返回的数组中,即使它不应该。对嵌套对象排序数组
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
}
的想法是,如果他们选择的设计,商业和代码,然后将生成的数组应以质量进行排序,否则我的质量和所选择的变量的混合。下面是数据:
[
{
"name":"dasd",
"scores": {
"quality": 8,
"relevancy": {
"design": 3,
"code": 9,
"business": 5
}
},
{...}
}
{...}
]
鉴于this.state
是:
this.state = {
minutes: int,
interests: {
business: bool,
code: bool,
design: bool
}
}
请加数据,以及在文字符号。 –
你是什么意思的“*第一个元素总是在返回数组*”? 'sort'不会放置或移除任何东西。 – Bergi
'sortedArray'具有与在操作开始时相同的第一个元素 – ocram