首页 > 解决方案 > javascript - 根据属性重新排序对象数组

问题描述

我正在为网页构建一个选择下拉输入。我想创建一个显示在下拉列表顶部的“流行”选项组。

我正在使用以下结构中的数据。我需要找到一种方法来根据他们的名字对 people 数组中的项目进行重新排序。

例如移动:
pogo-stick 从玩具 [2] -> 玩具 [0]
卡片从玩具 [3] 到玩具 [2]

我将拥有一系列受欢迎的玩具,例如:

popularToys: [
    "cards", "pogo-stick"
]

如何遍历对象数组并将它们移动到新顺序?

数据:

{
  "toys": [
    {
      "name": "car",
      "price": "10"
    },
    {
      "name": "duck",
      "price": "25"
    },
    {
      "name": "pogo-stick",
      "price": "60"
    },
    {
      "name": "cards",
      "price": "5"
    }
  ]
}

标签: javascriptarrayssorting

解决方案


您可以使用自定义排序功能

var popularToys = [
    "cards", "pogo-stick"
]

var data = {
  "toys": [
    {
      "name": "car",
      "price": "10"
    },
    {
      "name": "duck",
      "price": "25"
    },
    {
      "name": "pogo-stick",
      "price": "60"
    },
    {
      "name": "cards",
      "price": "5"
    }
  ]
};

function popularFirst(a, b) {
  var aIsPopular = popularToys.indexOf(a.name) > -1;
  var bIsPopular = popularToys.indexOf(b.name) > -1;
 
  if (aIsPopular) {
    // b could be popular or not popular, a still comes first
    return -1;
  } else if (bIsPopular) {
    // a isnt popular but b is, change the order
    return 1;
  } else {
    // no change
    return 0;
  }
}

console.log(data.toys.sort(popularFirst));


推荐阅读