使用javascript从JSON中根据顶级值获取两个不同的前4个键和值数组
假设我有一个JSON对象使用javascript从JSON中根据顶级值获取两个不同的前4个键和值数组,javascript,arrays,json,Javascript,Arrays,Json,假设我有一个JSON对象 var JSONObj = "skills":[ { "skill": "HTML", "rate": "4" }, { "skill": "JS", "rate": "5" }, { "ski
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]
您可以先按速率对数组排序,然后根据技能和速率进行映射:
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));
这是我的建议。希望有帮助。您可以使用reduce()
返回技能和费率数组,然后使用slice()
返回前4名
var JSONObj={
“技能”:[{
“技能”:“HTML”,
“比率”:“4”
}, {
“技能”:“JS”,
“比率”:“5”
}, {
“技能”:“jQuery”,
“比率”:“8”
}, {
“技能”:“角度2”,
“比率”:“1”
}, {
“技能”:“XML”,
“比率”:“3”
}, {
“技能”:“CSS”,
“比率”:“10”
}]
}
var r=JSONObj.skills.sort((a,b)=>b.rate-a.rate).reduce(函数(r,e){
r、 技能=(r.skills | |[])。concat(e.skill);
r、 比率=(r.rates | |[])。concat(e.rate);
返回r;
}, {})
var TopSkills=r.skills.slice(0,4);
var-TopRates=r.rates.slice(0,4);
控制台日志(TopSkills)
console.log(TopRates)
,甚至可以轻松使用forEach
var topSkills = [];
var topRates = [];
JSONObj.skills.sort((a, b) => b.rate - a.rate).forEach(item => {
topSkills.push(item.skill);
topRates.push(item.rate);
});
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”]
sort(函数(a,b){return parseFloat(a.rate)-parseFloat(b.rate)});
JSONObj.reverse();
var TopSkills=[];
var最高利率=[];
对于(变量i=0;iSuperb@Nenad!:)
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);
}