链接: https://gist.githubusercontent.com/tyrchen/32c50aadca48aee3da10a77a18479517/raw/3aa07629e61239cd26cf514584c949a98aa38d67/movies.csv 按照rank排序,取前topK

/**
 * 
 * @param {*} data 获取到的数据
 * @param {*} num 取top num个
 */
let top = (data, num) => {
    let res = [];
    let dataArr = data.split('\n');
    let dataLength = dataArr.length;

    for (let i = 0; i < dataLength; i++) {
        // 处理脏数据
        // example: "27, most popular",127.6053254325764,6.03051434574081
        if (dataArr[i].match('"')) {
            dataArr[i] = dataArr[i].replace(/".+"/, i);
        }

        dataArr[i] = dataArr[i].split(',');

        dataArr[i][2] = parseFloat(dataArr[i][2]);

        // 每次循环的时候进行一次rank从小到大的排序
        res.sort((a, b) => {
            return a[2] - b[2];
        });

        // 首先把数据填满到num个
        if (i > 0 && res.length < num) {
            res.push(dataArr[i]);
        }

        // 如果比数组中rank最小的还要大,就替换res中rank最小的
        if (res.length === num && dataArr[i][2] > res[0][2]) {
            res[0] = dataArr[i];
        }
    }
    console.log(res);
}

top(data, 20);

这里的做法利用了Array.sort的函数。 现在回想一下,好像不太对。直接sort排序,取一下前10不就可以了么。应该正常写一个快排。脏数据的处理,还差一个10e-1这种。(parseFloat好像也会给处理掉) 总结一下,要改进的问题。 1.写一个request请求,拿到原始数据。 2.使用快排重写 3.尝试是否能用js写一个Java的PriorityQueue

  • 数组打平
  1. es2019方法

    arr.flat(Infinity)

2.借助helper函数

let flatten = (arr) => {
    let result=[]
    let loop = (arr) => {
        for (let i = 0; i < arr.length; i++) {
            if (Array.isArray(arr[i])) {
                loop(arr[i]);
            }else{
                result.push(arr[i]);
            }
        }
    }
    loop(arr);
    return result;
}

3.不用helper函数

let flatten(arr) =>  {
    let res = [];

    let n = arr.length;
    for (let i = 0; i < n; i++) {
        if (Array.isArray(arr[i])) {
            res = res.concat(flatten(arr[i]));
        }
        else {
           res.push(arr[i]);
        }
    }

    return res;
}

4.使用some

let flatten = (arr) => {
//concat方法每次会拉平一层
    let res = [].concat(...arr);
    return res.some(Array.isArray) ? flatten(res) : res;
  }

5.使用reduce

let flatten = (arr) =>{
   return arr.reduce(
     (pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur)
   ,[])
}

6.使用toString

arr.toString().split(',');
  • 删除数组中指定元素

    let remove = (arr, item) => {
    for (let i = 0; i < arr.length; i++) {
    if (arr[i] === item) {
    arr.splice(i, 1);
    i–;
    }
    }
    return arr;
    }

  • Promise分批执行

firewalld基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disable firewalld 禁用: systemctl stop firewalld 添加 firewall-cmd –zone=public –add-port=80/tcp –permanent (–permanent永久生效,没有此参数重启后失效) 重新载入 firewall-cmd –reload 删除 firewall-cmd –permanent –remove-port=666/tcp

vim ~/.bash_profile
export PATH=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin:$PATH
#保存退出
source ~/.bash_profile
code . #当前目录就被打开了。

之前看同事用过,找了一下方便很多

其实是可以监听的,只是1024以下端口需要使用root权限。这样会有安全隐患。 所以,可以流量转发。 CentOS7下用firewalld

systemctl start  firewalld
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

爱奇艺

视频网页地址:https://m.iqiyi.com/v\_19rr2cvmus.html 页面会请求一个:https://cache.m.iqiyi.com/ 的接口 里面有一个字段m3u,为视频真实地址。 例:http://netcncallcnc.inter.iqiyi.com/videos/v0/20180720/d9/4f/eddadef77066dc7c960ae952ad83d71a.mp4?key=0035d94084c5cd162a40610306413ea4f&dis\_k=30eb0de0f1341eb0bd743fa691a234f3&dis\_t=1533397020&dis\_dz=CNC-BeiJing&dis\_st=44&src=iqiyi.com&uuid=a0d2dd1-5b65c81c-8c&m=v&qd\_k=9cae95479599021a58e7a683114455a3&sgti=13\_3eprs82wn5ib92y1mp2t6jdg\_1533397019752&qd\_ip=7b7118cf&qd\_p=7b7118cf&dfp=a06680c7961c14486e80f314cd8ffd7f6fa7df798edc359fa022c5d2cfdae1b13c&qd\_src=02020031010000000000&ssl=&ip=123.113.24.207&qd\_vip=0&dis\_src=vrs&qd\_uid=0&qdv=1&qd\_tm=1533397020221 有一些参数是可以去掉的。去掉之后: http://111.206.23.7/videos/v0/20180720/16/a4/db018716f61beac599012d45774c272d.mp4?key=0276ea66159aaa4db17c1724b53388ca6&dis\_k=2742e7645a8ed2f8dc1aaad964db9072b&dis\_t=1533395921&dis\_dz=CNC-BeiJing&dis\_st=44&qd\_k=52207238abb1ee50c64941d94d60a8be&qd\_ip=7b7118cf&qd\_src=02020031010000000000&qd\_vip=0&qd\_uid=0 必需参数: key: 0276ea66159aaa4db17c1724b53388ca6 dis_k: 2742e7645a8ed2f8dc1aaad964db9072b dis_t: 1533395921 dis_dz: CNC-BeiJing dis_st: 44 qd_k: 52207238abb1ee50c64941d94d60a8be qd_ip: 7b7118cf qd_src: 02020031010000000000 qd_vip: 0 qd_uid: 0

优酷

视频网页地址:https://m.youku.com/video/id_XMzc1MDQ5NjcyMA==.html 接口域名:https://ups.youku.com 字段:data->stream->segs 做了分片,顺序还没查清楚。扒起来可能比较困难。 iframe播放器(https也可以)

<iframe height=498 width=510 src='http://player.youku.com/embed/XMzc1MDQ5NjcyMA==' frameborder=0 'allowfullscreen'></iframe>

后面为页面id,看样子可以批量搞定。

bilibili

视频网页地址: https://www.bilibili.com/video/av28191680 视频地址:blob:https://www.bilibili.com/eeb8740a-3671-4405-9ab2-9177204949eb

<iframe src="//player.bilibili.com/player.html?aid=28191680&cid=48730521&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

实际只需要av后面的id即可 https://m.bilibili.com/video/av28191680.html 接口:https://api.bilibili.com/playurl durl->url

0%