如何按相同的值对JSON数据排序?

时间:2018-11-03 10:56:57

标签: javascript json

我有看起来像这样的JSON数据:

{
"items":[
{"name":"Dondasch",
"tier":"Rare"
},
{"name":"Elight",
"tier":"Rare"
},
{"name":"Krak",
"tier":"Unique"
}
]
}

,我正在寻找一种按“层级:???”对它们进行排序的方法。我想将所有具有相同值的“项目”组合在一起,最好以我定义的方式(例如,我可以选择是“稀有”还是“独特”的项目先出现,而不是按字母顺序排列。在我之后已经对它们进行了排序,我需要能够对它们执行以下代码:

data.items.forEach(wynnitem => {
      const card = document.createElement('div');
      card.setAttribute('class', 'card');

      const h1 = document.createElement('h1');
      $(h1).hide();
      h1.textContent = wynnitem.name;
      if (wynnitem.tier == "Unique") {
        h1.setAttribute('class', 'unique');
      } else if (wynnitem.tier == "Rare") {
        h1.setAttribute('class', 'rare');
      } else if (wynnitem.tier == "Legendary") {
        h1.setAttribute('class', 'legendary');
      } else if (wynnitem.tier == "Mythic") {
        h1.setAttribute('class', 'mythic');
      }
      $(h1).fadeIn(1000);
}):

我发现的任何其他问题都只是提供了一种按字母顺序对它们进行排序的方法,而不是按一定的值排序。

3 个答案:

答案 0 :(得分:0)

您可以将Array.prototype.sort方法应用于项目并为其提供一个compareFn

items.sort(function(a, b) {
    if (a.tier < b.tier) {
        return -1;
    }

    if (a.tier > b.tier) {
        return 1;
    }

    return 0;
});

答案 1 :(得分:0)

您只需要定义一个排名/优先级表并按此条件进行排序:

time <- 1:nlayers(gimms.sum) 
fun=function(x) { if (is.na(x[1])){ NA } else { m = lm(x ~ time); summary(m)$coefficients[2] }}
gimms.slope=calc(gimms.sum, fun)

答案 2 :(得分:0)

尝试一下:

  var list = {
    "items":[
    {"name":"Dondasch",
    "tier":"Rare"
    },
    {"name":"Elight",
    "tier":"Rare"
    },
    {"name":"Krak",
    "tier":"Unique"
    }
    ]
    }

然后使用

对数据进行排序
list.items.sort(function(a, b) { return a["tier"]-b["tier"]} || a["name"] - b["name"]);