JavaScript ネイティブ メソッドの完全なリスト
1.クリップボードにコピー
// 1.封装方法
function copyToClipboard(textToCopy) {
// navigator clipboard 需要https等安全上下文
if (navigator.clipboard && window.isSecureContext) {
// navigator clipboard 向剪贴板写文本
return navigator.clipboard.writeText(textToCopy);
} else {
// 创建text area
let textArea = document.createElement("textarea");
textArea.value = textToCopy;
// 使text area不在viewport,同时设置不可见
textArea.style.position = "absolute";
textArea.style.opacity = 0;
textArea.style.left = "-999999px";
textArea.style.top = "-999999px";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
return new Promise((res, rej) => {
// 执行复制命令并移除文本框
document.execCommand('copy') ? res() : rej();
textArea.remove();
});
}
}
// 2.页面上使用
var btn = document.getElementById("button");
btn.onclick =function(){
alert("你点击了按钮哦!");
copyToClipboard('我是复制的内容');
};
2. URLリンクパラメータを取得する
// 1.封装方法, name为参数名称
getQueryString(name){
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
const search = window.location.search.split('?')[1] || '';
const r = search.match(reg) || [];
return r[2];
}
// 2.页面上使用
let code = getQueryString('code');
3. タイムスタンプ処理
// 1.封装方法
/**
* @param {Number} 时间标签 e.g. 1463368789
* @param {String} 格式 e.g. 'yyyy-MM-dd hh:mm'
* y 年,M 月,d 日,s 时,m 分,s 秒,w 星期,z 周, x 星期,q 季度,S 毫秒,
* @returns {String} e.g. '2016-05-16 11:19'
*/
function parseTime(time, formatter) {
let text = '';
if (arguments.length == 0) {
return ''
}
formatter = formatter || 'yyyy-MM-dd hh:mm:ss'
text = formatter.indexOf('z') != -1 ? '周' : formatter.indexOf('x') != -1 ? '星期' : '';
let date
if (typeof time === 'object') {
date = time
} else {
if (('' + time).length === 10) time = parseInt(time) * 1000
date = new Date(time)
}
const formatObj = {
'y': date.getFullYear(), // 年
'M': date.getMonth() + 1, // 月
'd': date.getDate(), // 日
'h': date.getHours(), // 时
'm': date.getMinutes(), // 分
's': date.getSeconds(), // 秒
'w': date.getDay(), // 星期
'q': Math.floor((date.getMonth() + 3) / 3), // 季度
'S': date.getMilliseconds() // 毫秒
}
return formatter.replace(/(y|M|d|h|m|s|w|z|x|q|S)+/g, kw => {
const key = kw.charAt(0)
let value = formatObj[key] || 0
if (key === 'w') return [text + '一', text + '二', text + '三', text + '四', text + '五', text + '六', text + '日'][value - 1]
if (key === 'x') return ''
if (key === 'z') return ''
const len = Math.min(kw.length, 4)
value = ('0000' + value).slice(-len)
return value
})
}
// 2.页面上使用
let code = parseTime(1463368789991);
4.シャッフル機能
// 1.封装方法
// 原地洗牌算法
function shuffle(arr) {
for (let i = 0; i < arr.length; i++) {
let randomIndex = i + Math.floor(Math.random() * (arr.length - i))
;[arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]]
}
return arr
}
// 非原地洗牌算法
function shuffle2(arr) {
let _arr = []
while(arr.length) {
let randomIndex = Math.floor(Math.random() * arr.length)
_arr.push(arr.splice(randomIndex, 1)[0])
}
return _arr
}
// 2.页面上使用
console.log(shuffle([1, 2, 3, 4, 5, 6, 7, 8]))
console.log(shuffle2([1, 2, 3, 4, 5, 6, 7, 8]))
5.ディープコピー
オブジェクトと配列のディープ コピーの実装
単純なオブジェクトまたは配列の場合、より一般的に使用される JSON.parse(JSON.stringify(obj))
以下のメソッドは、より複雑なオブジェクトまたは配列のディープ コピーに適しています。
// 1.封装方法
function deepClone(obj) {
if (!obj && typeof obj !== 'object') {
throw new Error('error arguments', 'shallowClone');
}
const newObj = obj.constructor === Array ? [] : {
};
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') {
newObj[key] = obj[key].constructor === Array ? [] : {
};
newObj[key] = deepClone(obj[key]);
} else {
newObj[key] = obj[key]
}
})
return newObj
}
// 2.页面上使用
console.log(deepClone([1, 2, 3, 4, 5, 6, 7, 8]))
6. ランダムな色を取得する
#ffffff の形式でランダムな色のカラー値を生成します。
// 1.封装方法
function getRandomColor() {
const r = Math.round(Math.random() * 255);
const g = Math.round(Math.random() * 255);
const b = Math.round(Math.random() * 255);
const color = r << 16 | g << 8 | b;
return "#" + color.toString(16);
}
// 2.页面上使用
console.log(getRandomColor()) //#152368
7. ランダムコードの生成
ランダム コードの文字列をランダムに生成します。一部の位置は固定数である必要があり、一部の位置は何らかの処理を受ける必要があります。検証用
// 1.封装方法
function guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = Math.random() * 16 | 0;
let v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// 2.页面上使用
console.log(guid())//154d0c01-a873-4db4-8c39-db3327352c89
備考:
(r & 0x3 | 0x8)
:ビット単位でANDや演算を行います。たとえば、r=15
それは1111
;r & 0x3
それは0011
;つまり、それr & 0x3 | 0x8
は1011
11
v.toString(16)
: 数値を 16 進形式の文字に変換しますx
:位置をランダムに文字に置き換えますy
: 位置は計算された文字にランダムに置き換えられ、計算された値は10**
4
: 場所は置き換えられませんが、元の場所は保持されます。4
8. ランダムな文字列を生成する
// 1.封装方法
// 生成随机的字母数字字符串
function getRandomStr(len) {
let str = ''
for (; str.length < len; str += Math.random().toString(36).substr(2));
return str.substr(0, len)
}
// 2.页面上使用
console.log(getRandomStr(10)); // e3bo5tj6ki
9. n (m<n) の範囲で m 個の一意の乱数を取得します。
// 1.封装方法
function getRandomNumber(n, m) {
if (typeof n !== 'number' || typeof m !== 'number') {
throw Error('m和n必须是数字!');
}
if (m >= n) {
throw Error('m必须小于n!');
}
var arr = [],
result = [],
i = 0,
j = 0,
tempNumber = 0,
randomNumber = 0;
// 在两个数值间产生一个随机数
function selectFrom(lowerValue, upperValue) {
var choices = upperValue - lowerValue + 1;
return Math.floor(Math.random() * choices + lowerValue);
}
// 建一个n个元素的一维数组,放0 ~ n
for (; i < n; i++) {
arr[i] = i;
}
// 开始取 j ~ n-1 范内的随机数。把每次取到的随机数作为位置(数组的下标)与位置(数组的下标)为 j 的数交换数值
// 比如第一次去到32,将arr[32]和arr[0]互换,这样arr数组的1~n-1位置就没有32这个数了;然后再从1~n-1之间取随机数,以此类推
for (; j < m; j++) {
randomNumber = selectFrom(j, n - 1);
tempNumber = arr[j];
arr[j] = arr[randomNumber];
arr[randomNumber] = tempNumber;
result.push(arr[j]);
}
return result;
}
// 2.页面上使用
console.log(getRandomNumber(10, 5)); // [0, 4, 2, 1, 7]
10. 純粋な数値配列の最大値と最小値を取得する
// 1.封装方法
//获取纯数字数组中最大值
function getMax(arr) {
return Math.max.apply(Math, arr);
}
//获取纯数字数组中最小值
function getMin(arr) {
return Math.min.apply(Math, arr);
}
// 2.页面上使用
const numbers = [5, 0, 120, -215, 228, 11233205, -75411]
console.log(getMax(numbers)); // 11233205
console.log(getMin(numbers)); // -75411