JS按自定义键和值对数组对象进行排序

JS sort array object by custom key and value

我是刚学JS的学生,我发现了一个我无法解决的问题。我有一个对象数组,这些对象的一个​​键是 'priority',该键的值是:“low”、“mid”、“high”。我想将数组中的对象从最低优先级排序到最高优先级,但我无法弄明白。

let thingsToDo = [
  {
  name: 'Call',
  priority: 'low',
},
  {
  name: 'Cook',
  priority: 'low',
  },
    {
  name: 'Eat',
  priority: 'high',
  },
                {
  name: 'Sleep',
  priority: 'mid',
  }
];

我正在尝试制作一些自定义排序功能,但我不知道该怎么做。我认为一个好的解决方案是给这些值一些数字然后对其进行排序。对我来说非常重要的是将这些值保留为字符串。必须有priority: "low"

我一直在寻找解决方案,但没有找到。

不知道怎么弄,如果哪位好心人经验丰富,求助

您可以创建一个对象,将它们映射到可比较的值,然后根据它们进行排序:

const priority = {
    low: 1,
    mid: 2,
    high: 3,
};

thingsToDo.sort(
    (a, b) => priority[a.priority] - priority[b.priority]
);

这是一个工作片段:

let thingsToDo = [
    {
        name: 'Call',
        priority: 'low',
    },
    {
        name: 'Cook',
        priority: 'low',
    },
    {
        name: 'Eat',
        priority: 'high',
    },
    {
        name: 'Sleep',
        priority: 'mid',
    },
];

const priority = {
    low: 1,
    mid: 2,
    high: 3,
};

thingsToDo.sort(
    (a, b) => priority[a.priority] - priority[b.priority]
);

console.log(thingsToDo)

您可以将所有优先级放在一个数组中,然后根据优先级 属性 在该数组中的索引对对象进行排序。

let thingsToDo = [
  {
  name: 'Call',
  priority: 'low',
},
  {
  name: 'Cook',
  priority: 'low',
  },
    {
  name: 'Eat',
  priority: 'high',
  },
                {
  name: 'Sleep',
  priority: 'mid',
  }
];
let priorities = ['low', 'mid', 'high'];
thingsToDo.sort((a, b)=>priorities.indexOf(a.priority) - priorities.indexOf(b.priority));
console.log(thingsToDo);

试一试

const fruits = ["香蕉", "橙子", "苹果", "芒果"]; fruits.sort();