【JavaScript】 题 按指定方式排序

题目:

/**
  extensions is an Array and each item has such format:
  {firstName: 'xxx', lastName: 'xxx', ext: 'xxx',  extType: 'xxx'}
  lastName, ext can be empty, 
  extType can only has "DigitalUser", "VirtualUser", "FaxUser","Dept","AO".
**/

/**
  Question 1: sort extensions by 
  "firstName" + "lastName" + "ext" ASC
**/

function sortExtensionsByName(extensions) {
  let es = new ExtensionsSort(extensions);
  let attrs = [{

  }]

}

/**
  Question 2: sort extensions by extType follow these orders ASC
  DigitalUser < VitrualUser < FaxUser < AO < Dept.
**/
function sortExtensionsByExtType(extensions) {

}

解法:

class ExtensionsSort {
    constructor () {
        this.extTypeList = ['DigitalUser', 'VirtualUser','FaxUser', 'AO', 'Dept'];
    }
    
    //比较两个变量
    compare (item1, item2) {
        //console.log('item1 = ',item1)
        //console.log('item2 = ',item2)
        if (item1 > item2)  
            return 1;
        else if (item1 < item2)           
            return -1;
        else
            return 0;    
    }

    //比较ExtType
    compareExtType (type1, type2) {
        //console.log('type1 = ',type1);
        //console.log('type2 = ',type2);
        let idx1 = this.extTypeList.indexOf(type1.extType);
        let idx2 = this.extTypeList.indexOf(type2.extType);
        //console.log("idx1 = ",idx1)
        //console.log("idx2 = ",idx2)
        if (idx1 === -1 || idx2 === -1) {
            console.log('extType can only has "DigitalUser", "VirtualUser","FaxUser","Dept","AO"');
        }
        return this.compare(idx1, idx2);
    }
  
    //比较"firstName" + "lastName" + "ext"
    compareAttrs (el1, el2, attrs) {
        //console.log("el1 = ",el1)
        //console.log("el2 = ",el2)
        //console.log("attrs = ",attrs)
        for (let i = 0; i < attrs.length; i++) {
            let val = this.compare(el1[attrs[i]], el2[attrs[i]]);
            //console.log("val = ",val);          
            if (val === 1 || val === -1) 
                return val;
        }        
        return 0;
    }
  
  }
  
function sortExtensionsByName(extensions) {
    let es = new ExtensionsSort(extensions);
    let attrs = ['firstName', 'lastName', 'ext'];
    console.log("begin sort extensions by firstName + lastName + ext\n",extensions);
    extensions.sort((a, b) => {
        return es.compareAttrs(a, b, attrs);
    });
    console.log("finish sort extensions by firstName + lastName + ext\n",extensions);
    return extensions;
}
  
function sortExtensionsByExtType(extensions) {    
    let es = new ExtensionsSort(extensions);
    console.log("begin sort extensions by extType\n",extensions);
    extensions.sort((a, b) => {
        return es.compareExtType(a, b);
    });
    console.log("finish sort extensions by extType\n",extensions);
    return extensions;
}

// 
var e1 = [
    {firstName: "S", lastName: 'G', ext: 'xxx', extType: 'FaxUser'},
    {firstName: "A", lastName: 'G', ext: 'xxx', extType: 'DigitalUser'},
    {firstName: "A", lastName: 'H', ext: 'xxx', extType: 'AO'}
];

sortExtensionsByName(e1);
sortExtensionsByExtType(e1);

参考资料:关于几道题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值