跳至主要內容
实现async-await

此次我们来实现一个 async await 内部实现
实际上 async 就是生成器的语法糖,await 就是 then 的语法糖,
平常我们使用的过程中

示例

const getDate = () =>
  new Promise((resolve, reject) => setTimeout(() => resolve("data"), 1000));
async function test() {
  const res = await getDate();
  console.log("data:", res);
  const res2 = await getDate();
  console.log("data2:", res2);
}
// 输出
//data:data
//data2:data

ZiHao...大约 3 分钟记录技术实践 -
排序算法汇总

归并排序

排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。
归并排序采用的是分治思想。

分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。

const mergeSort = (arr) => {
  let len = arr.length;
  if (len < 2) {
    return arr;
  }
  let middle = Math.floor(len / 2);
  let left = arr.slice(0, middle);
  let right = arr.slice(middle);
  return merge(mergeSort(left), mergeSort(right));
};
//
const merge = (left, right) => {
  const result = [];
  while (left.length && right.length) {
    if (left[0] <= right[0]) {
      result.push(left.shift());
    } else {
      result.push(right.shift());
    }
  }
  while (left.length) {
    result.push(left.shift());
  }
  while (right.length) {
    result.push(right.shift());
  }
  return result;
};
const arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];
console.time("归并排序耗时");
console.log("arr :", mergeSort(arr));
console.timeEnd("归并排序耗时"); // 大约 8ms

ZiHao...大约 2 分钟记录算法
数字转罗马数字

罗马数字由 777 个不同的单字母符号组成,每个符号对应一个具体的数值。此外,减法规则(如问题描述中所述)给出了额外的 666 个复合符号。这给了我们总共 131313 个独特的符号(每个符号由 111 个或 222 个字母组成),如下图所示。

我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号值。对于 140,最大可以选择的符号值为 C=100。接下来,对于剩余的数字 140,最大可以选择的符号值为 XL=40。因此,140 的对应的罗马数字为 C+XL=CXL。


ZiHao...小于 1 分钟JavaScript记录算法
React Native 桥接原生

桥接原生方法

  1. 在原生文件中找到 MainApplication,里面的 getPackages,就是用来注册自己写的原生应用
image.png
image.png

ZiHao...大约 7 分钟前端跨平台前端React Native
React Native动画系统

初识动画系统

想要对一个元素添加动画,需要借助 RN 中 Animated,

const Anim1: FC<Props> = () => {
  const marginLeft = useRef(new Animated.Value(100)).current; //创建需要动画的值
  return (
    <View style={styles.container}>
      <Text>Hello</Text>
      <Button
        title="动画执行"
        onPress={() => {
          Animated.timing(marginLeft, {
            //创建动画
            toValue: 300,
            duration: 1000,
            useNativeDriver: false,
          }).start(); //执行动画
        }}
      ></Button>
      <Animated.View style={[styles.view, { marginLeft: marginLeft }]}></Animated.View>
    </View>
  );
};

ZiHao...大约 3 分钟前端跨平台前端React Native
React Native的API

日志

alert :简单的弹窗提示

<Button
  title="弹窗"
  onPress={() => {
    alert("原生弹窗提示");
  }}
></Button>

ZiHao...大约 4 分钟前端跨平台前端React Native
Vercel部署个人博客+白嫖个人域名

vercel

(补充:vercel 在国内已被墙,一个悲伤的消息,网站只能科学上网查看,或者自己绑定域名)

测试

使用vuepress+github 托管

我们可以使用 vercel 进行部署,vercel 和 github actions 很相似,都是通过将博客的所有必须文件(包括 package.json,docs 等)push 到 github 的某个仓库仓库中,然后在 vercel 中创建一个项目,导入此仓库,之后的一切就交给 vercel 去做了
并且 vercel 还能够自动部署,如果你 commit 了新的内容,vercel 监测到有新的 commit 之后,便会重新运行 npm run build 命令进行部署,你只需要将新的修改,从本地 push 到 github 便可以了(比如新增一篇文章),而不需要像 github pages,服务器部署那样,每次新增文章,都需要在本地运行 npm run build,然后再将 docs/.vuepress/dist 目录中的所有文件,上传到 github 或者服务器中才能完成博客新内容的改变


ZiHao...大约 3 分钟记录博客
React Hooks

useState()

const [state, setState] = useState(initialState);

ZiHao...大约 9 分钟ReactReactReact Hooks
数字电子技术——数据选择器

数据选择器的地址输入和数据输入怎么理解

以一个 4-1 数据选择器为例,它有 4 个数据输入线(D0, D1, D2, D3)、2 个选择输入线(S0, S1)和 1 个输出线(Y)。S0 和 S1 是地址输入,它们可以选择其中一个数据输入线作为输出线的数据。
例如,当 S0=0, S1=0 时,选择器会选择 D0 作为输出数据,因为 S0 和 S1 的二进制值为 00,对应的是选择器的第 1 个数据输入线 D0,而 D0 的数据输入则是指在 D0 输入线上输入的具体数字。
因此,地址输入和数据输入是数据选择器的两个重要的输入,用于选择和输出特定的数据。


ZiHao...大约 2 分钟专业课javascript
手写一些函数
  1. 二维数组斜向打印
(function () {
  function printMaxit(arr: number[][]) {
    let row = arr.length; //行 x
    let conlum = arr[0].length; //列 y
    let res: any = [];
    //左上角  从0开始打印到conlum-1;
    for (let k = 0; k < conlum; k++) {
      for (let i = 0, j = k; i < row && j >= 0; i++, j--) {
        res.push(arr[i][j]);
      }
    }
    //右下角
    for (let k = 1; k < row; k++) {
      for (let i = k, j = row; i < row && j >= 0; i++, j--) {
        res.push(arr[i][j]);
      }
    }
    return res;
  }
  const matrix2 = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
  ];
  console.log(printMaxit(matrix2));
  // 输出: [1, 5, 2, 9, 6, 3, 10, 7, 4, 11, 8, 12]
})();

ZiHao...大约 4 分钟记录javascript
2
3
4
5
...
10