EdwardZZZ / articles

工作点滴记录
2 stars 0 forks source link

面试题解答 #15

Open EdwardZZZ opened 7 years ago

EdwardZZZ commented 7 years ago

用js把 aaa?.bbb?.ccc?[45]?.ddd 解析成下面的字符串 aaa && aaa.bbb && aaa.bbb.ccc && aaa.bbb.ccc[45] && aaa.bbb.ccc[45].ddd

const s = 'aaa?.bbb?.ccc?[45]?.ddd';
// Regexp
s.replace(/\?/g, ' && $`').replace(/\?/g, '');

// map
s.split('?').map((_, i, a) => a.slice(0, i + 1).join('')).join(' && ')

// reduce
s.split('?').reduce((prev, curr) => (prev.push(prev[prev.length - 1] + curr), prev), ['']).slice(1).join(' && ')
// const resultArr = []
// s.split('?').reduce((prev, curr) => resultArr[resultArr.push(prev + curr) - 1], '')
// resultArr.join(' && ')
function foo(a,b){
  this.val = a+b;
}

var obj = {val : 'p3'};

var bar = foo.bind(obj, 'p1');
var baz = new bar('p2');

console.log(baz.val);  // p1p2
console.log(obj);  // p3
EdwardZZZ commented 4 years ago
// 版本比较

const result = arr.sort((str1, str2) => {
    let i = 0;
    const arr1 = str1.split('.');
    const arr2 = str2.split('.');

    while (true) {
        const s1 = arr1[i];
        const s2 = arr2[i++];

        if (s1 === undefined || s2 === undefined) {
            return arr1.length - arr2.length;
        }

        if (s1 === s2) continue;

        return s1 - s2;
    }
});