使用javascript从JSON中根据顶级值获取两个不同的前4个键和值数组

使用javascript从JSON中根据顶级值获取两个不同的前4个键和值数组,javascript,arrays,json,Javascript,Arrays,Json,假设我有一个JSON对象 var JSONObj = "skills":[ { "skill": "HTML", "rate": "4" }, { "skill": "JS", "rate": "5" }, { "ski

假设我有一个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]
您可以先按速率对数组排序,然后根据技能和速率进行映射:

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);
}