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

问题描述 投票:0回答:3

我是一名新的 JS 学生,我发现了一个我自己无法解决的问题。我有一个对象数组,这些对象的键之一是“优先级”,该键的值为:“低”、“中”、“高”。我想将数组中的对象从最低优先级到最高优先级排序,但我无法弄清楚。

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

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

priority: "low"

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

我不知道该怎么做,所以如果有经验丰富的好人,我恳求帮助。

javascript sorting
3个回答
1
投票

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

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


0
投票

尝试一下

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


0
投票

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

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)

© www.soinside.com 2019 - 2024. All rights reserved.