在js羣裏看到有人發問,於是抱着練手的心態寫了答了幾個面試題,題目雖然不是太難,卻很考驗人的編程思維。汗顏,看了別人的答案後才發現自己好像笨了很多。 廢話不說了 ,上代碼。
1 要求 給一個數組的最後一個元素加1 結果大於10則給前一個元素加1 並設置當前元素值=0;前一個元素亦是如此,例如
var a=new Array(3,9); a[1]+1; a=[3,9];
此題看似很簡單,只要最後一個元素等於10 就給錢一個元素加1,設置當前元素爲0就是了,但還有一種特殊一點的情況,就是當數組的所有元素都爲9時,還要在向數組內添加一個元素。我給出的答案如下:
$(function () { add(); }) function add() { var a = [9,4]; var b = a; var sum ; b[b.length - 1]=( b[b.length - 1] )+ 8; if (b[b.length - 1] >=10) { b[b.length - 1] = b[b.length - 1] - 10; var i = b.length - 2; while (i> -2) { if (i != -1) { sum = b[i] + 1; if (sum >=10) { b[i] = sum - 10; } else { b[i] = sum; break; } i--; } else { a = [1]; a.push(b); i--; } } } else { a = b; } alert(a); }
看了別人寫的代碼,才發現自己吧問題複雜化了,寫了一堆代碼,如果使用js的unshift()函數會更好,向數組頭部添加一個或多個元素並返回新的數字長度。汗,自己js瞭解的少也不知道有這麼個方法。但這樣寫本質還是一樣的,個人覺得最正確的寫法應該是這樣:
//轉換整數後計算在轉爲數組 $.(function() { var num = [9,9,9,9,9], intA = parseInt(num.join("")); intA++; var newStr = intA.toString(), newArr = []; for(var i=0,l=newStr.length;i<l;i++) { newArr.push(parseInt(newStr[i])); } alert(newArr); });
這個問題本來就是一個用數組模擬十進制加法的事,所以轉換成數字來計算是最直接簡單的。同時也發現一個問題,自己和別人的差距咋就這麼大捏?
還有一個查找一個字符串中“每”個字符出現的次數的,例如'assddfsds'中a s d f 分別出現了幾次,當時寫了下但沒有保存,在這裏就不說了 有興趣的可以自己去看下,注意,只限js語法;