sort – Javascript legt manuell die Reihenfolge eines Arrays von Objekten fest
淡淡烟草味
淡淡烟草味 2017-06-28 09:27:54
0
2
690

Ich möchte, dass es in der von mir angegebenen Reihenfolge angeordnet wird. Ich verwende die folgende Methode, um dies ausschließlich mit nativem JavaScript zu tun Gibt es lodash oder andere Methoden? Können bekannte Pakete von drei Parteien die folgenden Effekte erzielen, oder gibt es andere effizientere und einfachere Möglichkeiten, sie zu schreiben?


var arr = [
    {
        name:'小麦',
        phone:'112233'
    },
    {
        name:'绿绿',
        phone:'4445566'
    },
    {
        name:'增增',
        phone:'321321'
    },
    {
        name:'弱弱',
        phone:'123123'
    }
];

//希望达到的顺序 (我已知所有元素)
var order = {
    '增增':0,
    '弱弱':1,
    '绿绿':2,
    '小麦':3
};

var newOrderedArr = [];

arr.forEach((element)=>{
    newOrderedArr[order[element.name]] = element;
});

console.log(newOrderedArr);

Die Ergebnisse der Konsole sind wie folgt

[ { name: '增增', phone: '321321' },
  { name: '弱弱', phone: '123123' },
  { name: '绿绿', phone: '4445566' },
  { name: '小麦', phone: '112233' } ]
淡淡烟草味
淡淡烟草味

Antworte allen(2)
黄舟

如果 orders 里面是按 0 ~ n 的连续值,那你的方法已经非常非常快了,其它库方法达不到这个速度(因为它们会考虑不连续的情况)

如果不连续,可以用 sort

newOrderedArr = arr.sort((a, b) => order[a.name] - order[b.name]);

或者也可以用你的办法,再加个过滤

newOrderedArr = newOrderedArr.filter(n => n);

补充:对非连续序号的情况,加不加排序的比较如图

漂亮男人

这个思路觉得已经很快了。从易用的角度看 order 的 index 可以生成,这样每次输入名字的数组即可。

但如果有重名则不行。得为每个名字维护个数组记录,最后再 concat 起来

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage