考慮以下數組:javascript數組排序?
var things = ['sandwich', 17, '[email protected]', 3, 'horse', 'octothorpe', '[email protected]', '[email protected]'];
排序陣列分爲三個他人號碼之一,字符串之一,並且有效的電子郵件地址之一。丟棄無效的地址。
考慮以下數組:javascript數組排序?
var things = ['sandwich', 17, '[email protected]', 3, 'horse', 'octothorpe', '[email protected]', '[email protected]'];
排序陣列分爲三個他人號碼之一,字符串之一,並且有效的電子郵件地址之一。丟棄無效的地址。
var emails = [], strings = [], numbers = [];
things.forEach(function (e) {
if (typeof e == "string") {
if (e.indexOf("@") != -1) { // "looks" like an email if it contains @
if (isEmail(e)) emails.push(e); // push if it is a valid email
}
else strings.push(e);
}
else if (typeof e == "number") {
numbers.push(e);
}
});
function isEmail(str) { return /** true if str is a valid email **/ }
我會離開它給你拿出一個正確的isEmail
功能。
你需要的是使用Array對象的過濾函數。
例子:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
你需要寫3個自定義過濾功能爲每個需要的陣列。
前兩個條件是微不足道的,對於第三個條件,我建議選擇一個正則表達式來滿足您的驗證郵件的要求。一個短的將是^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$
。
問候, 阿林
+1很好的答案。讓OP在沒有給予他的情況下繼續下去。 – 2010-10-04 21:45:53
(function(arr) {
var a = [], b = [], c = [];
for (var i = 0; i < arr.length; i += 1) {
if (typeof arr[i] === "number") {
a.push(arr[i]);
} else if (isValidEmail(arr[i])) {
b.push(arr[i]);
} else if (typeof arr[i] === "string") {
c.push(arr[i]);
}
}
return [a, b, c];
}());
isValidEmail(s)返回true,如果該參數是表示有效電子郵件的字符串。你是最好的使用這個正則表達式的...
順便說一句,你用這樣的方式,分配上述表達式給一個變量,然後將此變量包含三個數組作爲其項目...
您將a,b,c分配給同一個數組。您需要爲每個數組指定一個新的實例,否則您將推送到內存中的同一個數組。 – 2010-10-04 21:49:32
更正。謝謝你指出。 – 2010-10-04 21:51:43
做你自己的作業... – 2010-10-04 21:35:57
做結果數組必須自己排序..? – 2010-10-04 21:39:16
@Josh,或者至少*標記*作爲家庭作業......另外,我們應該如何從兩個數組中得到三個數字? – 2010-10-04 21:41:07