假设我有一个JSON对象。
var JSONObj = "skills":[
{
"skill": "HTML",
"rate": "4"
},
{
"skill": "JS",
"rate": "5"
},
{
"skill": "jQuery",
"rate": "8"
},
{
"skill": "Angular 2",
"rate": "1"
},
{
"skill": "XML",
"rate": "3"
},
{
"skill": "CSS",
"rate": "10"
}
]我想根据TopRates和TopSkills在Javascript中的速率为它们生成两个不同的数组。例如,var TopSkills = ["CSS", "jQuery", "JS", "HTML"]; var TopRates = [10, 8, 5, 4]
发布于 2016-10-07 16:54:28
您可以使用reduce()返回技能和比率数组,然后使用slice()返回前4。
var JSONObj = {
"skills": [{
"skill": "HTML",
"rate": "4"
}, {
"skill": "JS",
"rate": "5"
}, {
"skill": "jQuery",
"rate": "8"
}, {
"skill": "Angular 2",
"rate": "1"
}, {
"skill": "XML",
"rate": "3"
}, {
"skill": "CSS",
"rate": "10"
}]
}
var r = JSONObj.skills.sort((a, b) => b.rate - a.rate).reduce(function(r, e) {
r.skills = (r.skills || []).concat(e.skill);
r.rates = (r.rates || []).concat(e.rate);
return r;
}, {})
var TopSkills = r.skills.slice(0, 4);
var TopRates = r.rates.slice(0, 4);
console.log(TopSkills)
console.log(TopRates)
发布于 2016-10-07 16:50:27
您可以先按比率对数组进行排序,然后用技巧和速率进行映射:
var sortedBySkill = JSONObj.skills.sort(function(a, b) {
return b.rate - a.rate;
});
console.log(sortedBySkill.map(function(a) {
return a.skill;
}).slice(0,4));
console.log(sortedBySkill.map(function(a) {
return a.rate;
}).slice(0,4));这是小提琴。希望能帮上忙。
发布于 2016-10-07 17:00:58
甚至可以很容易地使用forEach
var topSkills = [];
var topRates = [];
JSONObj.skills.sort((a, b) => b.rate - a.rate).forEach(item => {
topSkills.push(item.skill);
topRates.push(item.rate);
});https://stackoverflow.com/questions/39922231
复制相似问题