首页 > 解决方案 > 如何创建函数以对列表中的 args 进行排序

问题描述

您好,我想为列表中的 args 排序创建一些东西,按它们在列表中的次数

所有参数都用一个分隔;

let list = "abcd1; abcd4; abcd4; abcd9; abcd2; abcd5"

该列表可以是 5 个参数,例如 100 或 243。

我认为它可以与两个 for 循环一起使用,以查看 i 元素是否重复并将数组 [i] 与数组 [j] 进行比较,您可以使用临时数组来创建对象,然后再重新分配给主数组。

但不知道该怎么做。

标签: javascript

解决方案


  1. 你的清单
let list = "abcd1; abcd4; abcd4; abcd9; abcd2; abcd5"
  1. 通过在 ';' 处拆分字符串来创建一个新列表
let newList = list.split(';')

// newList = ["abcd1", " abcd4", " abcd4", " abcd9", " abcd2", " abcd5"]
  1. 声明一个空对象并遍历新列表的所有元素并将它们作为键添加到对象中。如果对象中不存在键,则将值设置为 1,否则如果存在键,则将值加 1。
let obj = {}

for (let i of newList) {
    let newI = i.trim() // trim() to remove spaces or new line characters 

    // check if newI is already present in the object, i.e. we've seen it before
    // if that's the case then it must have a value so increment that value by 1
    if (newI in obj) {
        obj[newI] += 1
    }

    // if newI is not present in the object then we're seeing it for the first time.
    // so set its value as 1
    else {
        obj[newI] = 1
    }
}

// obj = {abcd1: 1, abcd4: 2, abcd9: 1, abcd2: 1, abcd5: 1}
  1. 获取数组中对象的键,最后对该数组进行排序,同时将对象``obj```中的值作为比较参数发送。因为我们想按该值在字符串中出现的次数进行排序。
let arr = Object.keys(obj)

// arr = ["abcd1", "abcd4", "abcd9", "abcd2", "abcd5"]

arr.sort((a, b) => obj[a] - obj[b])

// arr = ["abcd1", "abcd9", "abcd2", "abcd5", "abcd4"]

从字符串中出现次数最少到出现次数最多排序


推荐阅读