JS将数组中的数据按一定顺序输出

从ajax拿到的数据是这样的:

[
    {'appType':'D201005' , 'appName':'1131xxxx'},
    {'appType':'1030001' , 'appName':'133XXXX9527'},
    {'appType':'0201008' , 'appName':'195485233'},
    {'appType':'1030001' , 'appName':'78321245'},
    {'appType':'1030001' , 'appName':'25481166'},
    {'appType':'10300361' , 'appName':'371203XXXX0057667X'},
    {'appType':'1030001' , 'appName':'789132154'},
]

例如我想将身份证号最先在页面展示出来,其次是手机号,微信号,微信ID。
想写一个算法,因为,每次拿出来的数据不固定多少,有时候少一条,有时候少两条,但是我想要顺序是:身份证号,手机号,微信号,微信ID,的顺序,请问大家该怎么写?
谢谢大家的回答,可能大家误会我的意思了,前面的appType是唯一标识。我从大家身上收到很多启发,想出了一个复杂点的办法

阅读 5.9k
5 个回答

?

var arr  = ['身份证号','手机号','微信号',……];
var newData = [];
for(var i of arr.keys()){
    for(var j of data.keys()){
        if(arr[i] == data[j].appName){
            newData.push(data[j]);
            
        }
    }

}

arr.sort()

        const arr = [{
            'appType': 'D201005',
            'appName': '手机号'
        }, {
            'appType': '1030001',
            'appName': '微信号'
        }, {
            'appType': '0201008',
            'appName': '微信ID'
        }, {
            'appType': '1030001',
            'appName': '微信号'
        }, {
            'appType': '1030001',
            'appName': '微信号'
        }, {
            'appType': '10300361',
            'appName': '身份证号'
        }, {
            'appType': '1030001',
            'appName': '微信号'
        }]
        
        const order = {
            '身份证号': 0,
            '手机号': 1,
            '微信号': 2,
            '微信ID': 3,
        }
        arr.sort((a, b) => {
            return order[a.appName] - order[b.appName]
        })

最直白的想法,声明四个数组用来存储四类值,进行一次遍历,把相同的值push进同一个数组,最后返回的时候用contact函数连接一下

结果:
clipboard.png
代码:

var arr = [
    {'appType':'D201005' , 'appName':'手机号'},
    {'appType':'1030001' , 'appName':'微信号'},
    {'appType':'0201008' , 'appName':'微信ID'},
    {'appType':'1030001' , 'appName':'微信号'},
    {'appType':'1030001' , 'appName':'微信号'},
    {'appType':'10300361' , 'appName':'身份证号'},
    {'appType':'1030001' , 'appName':'微信号'},
];
function sort(arr,sort){
    var map = {};
    for(var i in arr){
        var data = arr[i];
        var list = map[data.appName];
        if(!list){
            map[data.appName] = [ data ];
        }else{
            list.push(data);
        }
    }
    
    var result = [];
    for(var i in sort){
        var k = sort[i];
        if(k in map){
            result = result.concat( map[k] );
        }
        
    }
    return result;
}

console.log( sort(arr,"身份证号,手机号,微信号,微信ID".split(",")) );

arr可以任意增加减少数据

新手上路,请多包涵

for in性能有些低,用object.keys

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题