首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript从JSON获取两个顶部4键和值的不同数组

使用javascript从JSON获取两个顶部4键和值的不同数组
EN

Stack Overflow用户
提问于 2016-10-07 16:44:28
回答 4查看 27关注 0票数 1

假设我有一个JSON对象。

代码语言:javascript
复制
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]

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-07 16:54:28

您可以使用reduce()返回技能和比率数组,然后使用slice()返回前4。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-10-07 16:50:27

您可以先按比率对数组进行排序,然后用技巧和速率进行映射:

代码语言:javascript
复制
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));

这是小提琴。希望能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2016-10-07 17:00:58

甚至可以很容易地使用forEach

代码语言:javascript
复制
var topSkills = [];
var topRates = [];
JSONObj.skills.sort((a, b) => b.rate - a.rate).forEach(item => {
  topSkills.push(item.skill);
  topRates.push(item.rate);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39922231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档