1. 關於陣列排序
排序一直是程式設計中的熱門話題。在js中,陣列有個sort()方法。在不傳引數預設情況下,陣列的sort()方法原理是:對數每項呼叫tostring()方法,比較字串按公升序排序陣列。看下面的例子。
var arra = [null, undefined, 3, 2, 5, 21, , p:'hello'}];var arrb = [undefined, null, 3, 2, 5, 21,, p: 'hello'}];
var arrc = [null, undefined, 3, 2, 21, , p:'hello'},,},
},},
}, 'u', 'v', 'nukk','nulk'];
arra.sort();
//結果是:[object, 2, 21, 3, 5, null, undefined]
arrb.sort();//
結果是:[object, 2, 21, 3, 5, null, undefined]
arra.sort()[0].p;//
hello
arrc.sort();
上面的例子說明:
a. sort()方法不傳比較函式時,的確是對每項呼叫了tostring()方法[對null應該是使用string(null)]轉換成字串再進行公升序排序的
b. undefined不會參與排序,直接放最後面
當要使用其它標準對陣列進行排序時,就要傳入乙個比較函式作為引數。原理及執行過程沒有弄清楚(有知道的請告訴下),但得到如下結論:
var arrd = [3, 5, 1, 8, 10];console.log(arrd.sort(compare));
function
compare(v1, v2)
下面是乙個實際demo:
/** * 為陣列實現乙個排序方法,能夠num、string、date、character和object的排序,
* 對object型別排序時,按照某個屬性排序。只考慮陣列中存放都是相同型別的資料
* @param order 為true表示公升序,false表示降序
* @param key 物件的鍵值 */
array.prototype.sametypesort = function
(order, key)
temparr.sort(ascending);
break
;
default
:
while(i < this
.length)
temparr = temparr.sametypesort(true
); }
//如果是時間,物件還要將還原成排序前的值
if(type === 'date')
}if(type === 'object')
}i++;}}
return order ?ret : ret.reverse();
function
type(target) ).tostring.call(target).slice(8, -1).tolocalelowercase();
}function
ascending(v1, v2)
};
下面是通過的qunit的測試**:
test( "數值排序", function() );
test( "字串排序", function
() );
test( "時間排序", function
() );
test( "物件排序", function
() ,,];
strictequal(arr.sametypesort(
true, 'key')[0].f, 'y');
strictequal(arr.sametypesort(
false, 'key')[0].f,'z');
console.log(arr.sametypesort(
true, 'key'));
console.log(arr.sametypesort(
false, 'key'));
});
2. match,replace函式練習
a. **千分
/** * 在整數部分對費用進行千分。一開始想用正則來做,但實現過程中發現各種問題,最後**變成下面的樣子了
* @param feestr 有效的費用數值字串
* @returns 進行了千分格式化後的字串 */
function
splitfee(feestr)
else
/*match = feestr.match(/\./);
leftctx = regexp.leftcontext;//整數部分
rightctx = regexp.rightcontext; 使用正則會有乙個bug,若後面match匹配失敗,後面的rightctx始終會儲存前次匹配的值
*/leftctx = leftctx ?leftctx : feestr;
rightctx = rightctx ? '.'+rightctx : '';
ret = (leftctx.split('').reverse().join('').replace(/(\d)/g, function
(m, ms, offset, targetstr) ).split('').reverse().join('')+rightctx).replace(/^\,/,'');
return
ret;
}
通過的qunit測試**
test( "replace, match練習:數值字串千分", function() );
b. 交換包含兩個單詞的字串
/** * 交換單詞字串中的兩個單詞
* @param str
* @returns */
function
swaptwowords(str)
//qunit測試
test( "replace練習:交換單詞", function
() );
c. 字串模板替換方法
/** * 字串模板替換方法
* @param str
* @param obj */
function
format(str, obj) )/gm, function
(m, ms, offset, targetstr) );}//
qunit測試
test( "字串模板format方法", function
() ';
strictequal(format(str, ), '100
xyz');
});
字串陣列排序
1,給定乙個字串陣列。按照字典順序進行從小到大的排序。思路 1,對陣列排序。可以用選擇,冒泡都行。2,for巢狀和比較以及換位。3,問題 以前排的是整數,比較用的比較運算子,可是現在是字串物件。字串物件怎麼比較呢?物件中提供了用於字串物件比較的功能。compareto 方法。public class...
隨機字串陣列排序
要求 建立乙個長度是8的字串陣列 使用8個長度是5的隨機字串初始化這個陣列 對這個陣列進行排序,按照每個字串的首字母排序 無視大小寫 注1 不能使用arrays.sort 要自己寫 注2 無視大小寫,即 a x 和 a xx 沒有先後順序 string s new string 8 用來存放8句字串...
字串 字串排序
頻率統計 將頻率轉換為索引 資料分類 回寫頻率統計 統計每個字元出現的次數 將頻率轉換為索引 確定不同字元首位置 從右到左檢查檢查鍵中的字元 public class lsd public class msd public static void sort string a private stat...