1、通过原型链判断数据类型
function getType(data) {
let prototype = Object.prototype.toString.call(data);
switch (prototype) {
case '[object Object]': return 'object';
case '[object Number]': return 'number';
case '[object String]': return 'string';
case '[object Boolean]': return 'boolean';
case '[object Array]': return 'array';
case '[object Undefined]': return 'undefined';
case '[object Null]': return 'null';
case '[object Date]': return 'date';
case '[object RegExp]': return 'regExp';
case '[object Function]': return 'function';
default:
if (data instanceof Element) {
return 'element';
}
return 'object';
}
}
2、数组元素交换位置
// 针对一维数组
/**
* 数组元素交换位置
* @param {array} arr 数组
* @param {number} index1 待交换的索引下标1
* @param {number} index2 待交换的索引下标2
* index1和index2分别是两个数组的索引值,即是两个要交换元素位置的索引值,如1,5就是数组中下标为1和5的两个元素交换位置
*/
function swapArray(arr, index1, index2) {
arr[index1] = arr.splice(index2, 1, arr[index1])[0];
return arr;
}
// 后移一位:将当前数组index索引与后面一个元素互换位置,向数组后面移动一位
function zIndexToNext(arr, index, length) {
if (index + 1 != length) {
swapArray(arr, index, index + 1);
} else {
alert('已经是数组最后一个元素,无法后移');
}
}
// 前移一位:将当前数组index索引与前面一个元素互换位置,向数组前面移动一位
function zIndexToPrev(arr, index) {
if (index != 0) {
swapArray(arr, index, index - 1);
} else {
alert('已经是数组第一个元素,无法前移');
}
}
// 将当前元素移到数组的最后一位
function zIndexToLast(arr, index, length) {
if (index + 1 != length) {
// 首先判断当前元素需要后移几个位置,移动到数组的最后一位
var moveNum = length - 1 - index;
// 根据需要后移的次数,循环移动
for (var i = 0; i < moveNum; i++) {
swapArray(arr, index, index + 1);
index++;
}
} else {
alert('已经移至数组最后一位');
}
}
// 将当前元素移到数组的第一位
function zIndexToFirst(arr, index) {
if (index != 0) {
// 首先判断当前元素需要前移几个位置,移动到数组的第一位
var moveNum = index - 0;
// 根据需要前移的次数,循环移动
for (var i = 0; i < moveNum; i++) {
swapArray(arr, index, index - 1);
index--;
}
} else {
alert('已经移至数组第一位');
}
}
来源:原博客
3、数字转换成千分位(即:将数值转换为金额格式)
下面的方法示例,均以逗号作为分隔符
(1) 利用正则的零宽断言:零宽度正预测先行断言(?=exp)
var str = "874596213";
console.info( str.replace(/\d{1,3}(?=(\d{3})+$)/g,function(s){
return s+','
}) );
// 输出的结果:874,596,213
(2) 用正则的子项来替换,与第一种方法类似
var str = "874596213";
console.info( str.replace(/(\d{1,3})(?=(\d{3})+$)/g,function($1){
return $1=$1+','
}) );
// 输出的结果:874,596,213
(3) 先将字符串转成数组,利用reverse反转数组后,每3个数字后添加一个分隔符“,”,到字符串末尾除外,之后转回字符串
var str = "874596213";
console.info( str.split("").reverse().join("").replace(/(\d{3})+?/g,function(s){
return s+",";
}).replace(/,$/,"").split("").reverse().join("") )
// 输出的结果:874,596,213
(4) 利用while循环拼接字符串每隔3个数字加一个分隔符,首尾不加
var str = "874596213";
var result="",
index = 0,
len = str.length-1;
while(len>=0) {
index%3===0&&index!==0 ? result+=","+str[len] : result+=str[len];
len--;
index++;
};
result=result.split("").reverse().join("");
console.info(result);
// 输出的结果:874,596,213
*(5) 利用while循环在数组里push分隔符,首尾不加
// 利用while循环在数组里push分隔符
var str = "874596213";
var result="",
index = 0,
len = str.length,
i = len-1,
arr = str.split("");
while(len-index>0){
len>=index&&len-index!==len && arr.splice(len-index,0,",");
index+=3;
i-=4;
};
console.log(arr.join(""));
// 输出的结果:874,596,213
来源:原博客
// .... 未完待续