@1002522146
        
        2018-08-09T02:58:13.000000Z
        字数 2608
        阅读 821
    面试题
const arr = [16, 31, 12, 1, 9, 23, 10]function bubbleSort (arr) {for (let i = 0; i < arr.length - 1; i++) {for (let j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j+1])// 为了避免引入一个中间变量// 这里用了 ES6 的结构赋值[ arr[j], arr[j+1] ] = [ arr[j+1], arr[j] ]}}return arr}bubbleSort(arr) // [1, 9, 10, 12, 16, 23, 31]
const arr = [16, 31, 12, 1, 9, 23, 10]function quickSort (arr) {if (arr.length <= 1) return arrconst middleIndex = Math.floor(arr.length / 2)const middle = arr.splice(middleIndex, 1)const left = []const right = []arr.forEach(v => {if (v < middle[0]) left.push(v)else right.push(v)})return quickSort(left).concat(middle, quickSort(right))}quickSort(arr) // [1, 9, 10, 12, 16, 23, 31]
不指定算法的数组排序
// 从小到大const arr = [16, 31, 12, 1, 9, 23, 10]// 这里用了箭头函数,写起来比较短arr.sort((a, b) => a - b)// 从大到小const arr = [16, 31, 12, 1, 9, 23, 10]arr.sort((a, b) => b - a)
const unsortedArray = [-10, 7, 29, 30, 5, -10, -70]// 乘积最大的只有可能是两种情况:// 1. 最大的三个数的乘积// 2. 最大的数和最小的两个数的乘积function multiply (unsortedArr) {// 从小到大排序const arr = unsortedArr.sort((a, b) => a - b)const length = arr.length// 计算两种情况的值result1 = arr[length - 1] * arr[length - 2] * arr[length - 3]result2 = arr[0] * arr[1] * arr[length - 1]return result1 > result2 ? result1 : result2}multiply(unsortedArray) // 21000
给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。
const arr = [1, 2, '1', null, undefined, null, undefined]// ES6 Set 和 Spread 操作符function uniqueArray (arr) {return [...new Set(arr)]}// ES5function uniqueArray (arr) {return arr.filter((v, i) => arr.indexOf(v) === i)}uniqueArray(arr) // [1, 2, '1', null, undefined]
function isPalindrome(word) {return word === word.split('').reverse().join('')}isPalindrome('racecar') // true
function sum() {var num = arguments[0];console.log(num)if(arguments.length === 2) {return arguments[0] + arguments[1]} else {return function(sec) {return num + sec;}}}
//第n项对应的数值。function com(n) {if (n <= 0) return 0;if (n == 1) return 1;return com(n - 1) + com(n - 2);}//前n项之和。function sum(n) {if (n == 1) return 1;if (n < 1) return 0;return com(n) + sum(n -1);}
function deepClone(initalObj, finalObj) {var obj = finalObj || {};for (var i in initalObj) {if (typeof initalObj[i] === 'object') {obj[i] = (initalObj[i].constructor === Array) ? [] : {};arguments.callee(initalObj[i], obj[i]);} else {obj[i] = initalObj[i];}}return obj;}var str = {};var obj = { a: {a: "hello", b: 21} };deepClone(obj, str);console.log(str.a);--------------function deepClone(initalObj, finalObj) {var obj = finalObj || {};for (var i in initalObj) {var prop = initalObj[i]; // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况if(prop === obj) {continue;}if (typeof prop === 'object') {obj[i] = (prop.constructor === Array) ? [] : {};arguments.callee(prop, obj[i]);} else {obj[i] = prop;}}return obj;}var str = {};var obj = { a: {a: "hello", b: 21} };deepClone(obj, str);console.log(str.a);