#javascript #arrays #json
#javascript #массивы #json
Вопрос:
Допустим, у меня есть объект 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"
}
]
Я хочу сгенерировать 2 разных массива для TopRates и TopSkills на основе их скорости в Javascript.
например,
var TopSkills = ["CSS", "jQuery", "JS", "HTML"];
var TopRates = [10, 8, 5, 4]
Ответ №1:
Вы можете использовать reduce()
для возврата массивов навыков и ставок, а затем slice()
для возврата top 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)
Комментарии:
1. Превосходно @Nenad! 🙂
Ответ №2:
Сначала вы можете отсортировать массив по скорости, а затем сопоставить с умением и скоростью:
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));
Вот скрипка. Надеюсь, это поможет.
Ответ №3:
или даже легко с помощью forEach
var topSkills = [];
var topRates = [];
JSONObj.skills.sort((a, b) => b.rate - a.rate).forEach(item => {
topSkills.push(item.skill);
topRates.push(item.rate);
});
Ответ №4:
var JSONObj = [{"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"}]
JSONObj.sort(function(a,b){return parseFloat(a.rate) - parseFloat(b.rate)});
JSONObj.reverse();
var TopSkills=[];
var TopRates=[];
for(var i=0;i<JSONObj.length;i ){
TopRates.push(JSONObj[i].rate);
TopSkills.push(JSONObj[i].skill);
}
Проверьте демонстрацию