「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
这是记录使用过的工具函数,有自己写的有以前网上找的。整合自己常用的代码。
递归处理树状结构的数据
不知道这算尾递归还是柯里化...
树 ==> 列表
function toList(params, list = []) {
params.forEach(v => {
if (!v.children || v.children.length == 0) {
delete v.children;
}
list.push(v)
if (v.children?.length > 0) {
toList(v.children, list)
}
})
return list;
}
列表 ==> 树
function toTree(params, pid = 0) {
let arr = []
params.forEach(v => {
if (v.pid == pid) {
let obj = {
...v,
}
toTree(params, v.id)?.length > 0 ? obj.children = toTree(params, v.id) : '';
arr.push(obj)
}
})
return arr;
}
node下载
使用request请求资源用fs创建一个写入流
const request = require("request");
const fs = require("fs");
const path = require("path");
let stream = fs.createWriteStream(
path.join("./", 'xxx.xxx')
);
request(
{
method: 'get',
url:'xxx',
}
)
.pipe(stream)
.on("close", function () {
console.log(
"文件[" + 'xxx.xxx' + "]下载完毕"
);
});
node起一个服务可以访问指定文件
纯属好玩... 这类似的工具很多的而且很好用如:webpack,gulp。
const http = require("http");
const fs = require("fs");
const server = http.createServer(function (req, res) {
//设置响应头
console.log(req.url)
res.writeHead(200, {
"Content-Type": "text/html;charset=UTF-8"
})
//设置访问的url路径
if (req.url == "/" || req.url == "/text") {
//路径为相对路径,也就是说与这个js文件同级的有一个html文件
fs.readFile("./2.html", function (err, data) {
res.writeHead(200, {
"Content-Type": "text/html;charset=UTF-8"
});
res.end(data);
});
}
})
server.listen(8888, function () {
console.log('running at 8888......');
console.log('http://localhost:8888');
});
node掘金抽奖梭哈
var request = require('request');
let url = 'https://api.juejin.cn/growth_api/v1/lottery/draw';
let headers = {
"cookie": "",
"content-type": "application/json"
}
let options = {
method: 'post',
url,
form: {},
headers
};
request({
method: 'get',
url:'https://api.juejin.cn/growth_api/v1/get_coder_calendar',
headers
}, function (err, res, body) {
if (err) {
console.log(err);
} else {
console.log(body);
}
})
for (let i = 0; i < 100; i++) {
request(options, function (err, res, body) {
if (err) {
console.log(err,'['+i+']');
} else {
console.log(body,'['+i+']-------');
}
})
}
//数字转中文
function convertToChinaNum(num) {
var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千','万', '十', '百', '千','亿');//可继续追加更高位转换值
if(!num || isNaN(num)){
return "零";
}
var english = num.toString().split("")
var result = "";
for (var i = 0; i < english.length; i++) {
var des_i = english.length - 1 - i;//倒序排列设值
result = arr2[i] + result;
var arr1_index = english[des_i];
result = arr1[arr1_index] + result;
}
//将【零千、零百】换成【零】 【十零】换成【十】
result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
//合并中间多个零为一个零
result = result.replace(/零+/g, '零');
//将【零亿】换成【亿】【零万】换成【万】
result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
//将【亿万】换成【亿】
result = result.replace(/亿万/g, '亿');
//移除末尾的零
result = result.replace(/零+$/, '')
//将【零一十】换成【零十】
//result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
//将【一十】换成【十】
result = result.replace(/^一十/g, '十');
return result;
}
//洗牌
let arr = [
{id:1},
{id:2},
{id:3},
{id:4},
{id:5},
{id:6},
]
arr.sort((a,b) =>{
return Math.random() - 0.5
})
console.log(arr);
//中文排序
var arr = ['南京', '北京', '上海', '杭州', '深圳'];
function sortChinese (arr) { // 参数: 排序的数组
arr.sort(function (item1, item2) {
return item1.localeCompare(item2, 'zh-CN');
})
}
sortChinese(arr)
console.log(arr); // ["北京", "杭州", "南京", "上海", "深圳"]
//标签全屏
element.requestFullscreen();
document.exitFullscreen();
//标签不可点击css
pointer-events: none;
数据格式互转:www.cnblogs.com/ajaemp/p/12…
获取媒体流
function getMedia1(video) {
navigator.mediaDevices.getUserMedia({
video: {
width: 1366,
height: 766,
},
}).then(strem => {
video.srcObject = strem;
video.play()
})
}
function getMedia2(video) {
navigator.mediaDevices.getDisplayMedia({
audio:true,
video: {
width: 1366,
height: 766,
},
}).then(strem => {
video.srcObject = strem;
console.log(strem.getAudioTracks())
video.play()
})
}
let video = document.querySelector('video');
//getMedia1(video);
getMedia2(video);