题目:
/**
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);
参考资料:关于几道题