数组的API是居多的。
//创建一个方法,返回value值对应的key
function findKey (obj,value, compare = (a, b) => a === b) {
return Object.keys(obj).find(k => compare(obj[k], value))
}
findKey(myObject, keyValue)
// 在数组中寻找min/max
Math.max(...array)
Math.min(...array)
function getMax(array) {return Math.max(...array);}
function getMax(array) {return Math.min(...array);}
// 在数组中求min/max 不改变数组
function getMax(arr) {
var max = arr[0]
for(var i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
return max
};
// 数组排序法二:
arr.sort(function(a,b) {return a-b}) //升序
arr.sort(function(a,b) {return b-a}) //降序
// 深拷贝(数组和对象)
function clone(target) {
if (typeof target === 'object') {
var cloneTarget = Array.isArray(target) ? [] : {};
for (var key in target) {
cloneTarget[key] = clone(target[key]);
}
return cloneTarget;
} else {
return target;
}
};
// 对象的属性名统一格式转为大写
function keysUpper(obj) {
let reg = new RegExp("([a-z]+)", "g");
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
let temp = obj[key];
if (reg.test(key.toString())) {
// 将修改后的属性名重新赋值给temp,并在对象obj内添加一个转换后的属性
temp = obj[key.replace(reg, function (result) {
return result.toUpperCase()
})] = obj[key];
// 将之前大写的键属性删除
delete obj[key];
}
// 如果属性是对象或者数组,重新执行函数
if (typeof temp === 'object' || Object.prototype.toString.call(temp) === '[object Array]') {
keysUpper(temp);
}
}
}
return obj;
};
// 对象的属性名统一格式转为小写
function keysLower(obj) {
let reg = new RegExp("([A-Z]+)", "g");
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
let temp = obj[key];
if (reg.test(key.toString())) {
// 将修改后的属性名重新赋值给temp,并在对象obj内添加一个转换后的属性
temp = obj[key.replace(reg, function (result) {
return result.toLowerCase()
})] = obj[key];
// 将之前大写的键属性删除
delete obj[key];
}
// 如果属性是对象或者数组,重新执行函数
if (typeof temp === 'object' || Object.prototype.toString.call(temp) === '[object Array]') {
keysLower(temp);
}
}
}
return obj;
};
// 日期格式化 为指定格式
/**
* function : Date Format
* @param: {String} fmt
* return: {}
*/
Date.prototype.format = function(fmt){
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(
RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
/**
* function: getAllIndex 找出指定元素出现的所有位置(字符串或者数组)
* @param {array/string} arr/atr
* @param {string} str
* @returns {array} res
*/
function getAllIndex(arr, element) {
var res = [];
var idx = arr.indexOf(element);
while(idx != -1) {
res.push(idx);
idx = arr.indexOf(element, idx + 1);
}
return res;
}
/**
* function: str_reverse
* @param {String} str
* @returns {String} reverseStr
*/
function str_reverse(str) {
var reverseStr = '';
for(var i = str.length-1; i >= 0; i--){
reverseStr += str[i];
}
return reverseStr;
}
/**
* function: str_indexOf
* @param {String} str
* @param {String} check_str
* @returns {Number} index
*/
function str_indexOf(str, check_str) {
var index = -1; // 初始化索引
for(var i = 0; i < str.length; i++) {
// 1. 截取字符片段
// var substr = str_substr(str,i,check_str.length)
var substr = str.substr(i, check_str.length)
if(check_str === substr) {
return i
}
}
return index;
}
/**
* function: 数组扁平化 flatten
* @param {array}
* return {array}
*/
//法一:
function flatten(arr) {
var res = [];
if(!(Array.isArray(arr))) throw new Error('params must be array');
for(var i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
res.concat(flatten(arr[i]))
}else{
res.push(arr[i]);
}
}
return res
}
//法二:
function flatten(arr){
var res = arr.reduce(function(prev, item) {
return prev.concat(Array.isArray(item)? flatten(item):item)
},[])
return res
}