【问题标题】:Sort Array According to Giving input In Js根据在Js中给出输入对数组进行排序
【发布时间】:2020-02-26 10:55:04
【问题描述】:

我有这样的数组:

Arr = [{name:"abc",age:1},{name:"a",age:4},{name:"ac",age:3},{name:"abc",age:2},{name:"abc",age:9}]

我想这样改:

[{name:"abc",age:1},{name:"abc",age:2},{name:"abc",age:9},{name:"a",age:4},{name:"ac",age:3}]

通过排序或交换。

【问题讨论】:

  • 想要的排序顺序是什么?
  • 同名的obj在前或者用户输入的名字应该在前
  • 在代码周围使用三个反引号来格式化问题。

标签: javascript sorting jsx swap arrayobject


【解决方案1】:

试试这个

arr1.sort((a, b) => {
    if(a.name.startsWith(b.name)) { return -1; }
    if(a.name < b.name) { return -1; }
    if(a.name > b.name) { return 1; }
    return 0;
})

【讨论】:

  • 结果与cmets中的顺序不同。
【解决方案2】:

您可以使用Map 收集相同命名的对象并取回扁平值。

这种方法保持name 的给定顺序,并将具有相同名称的对象组合在一起。

var array = [{ name: "abc", age: 1 }, { name: "a", age: 4 }, { name: "ac", age: 3 }, { name: "abc", age: 2 }, { name: "abc", age: 9 }];

array = Array
    .from(array
        .reduce((m, o) => m.set(o.name, [...(m.get(o.name) || []), o]), new Map)
        .values()
    )
    .flat();

console.log(array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2021-08-09
    • 2012-12-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多