虾皮一面-2

很舒服,没有八股,算法全手撕出来了。

1. 算法:字符串去重

设计一个 javascript 函数,实现字符串去重

"abcdfbee"

参数是字符串,返回值是去掉其中重复字符的字符串

"abcdfe"

javascript 复制代码
//@ts-check

/**
* @param {string[]} arr
*/
const MySet=(arr)=>{
    return arr.reduce((pre,cur)=>{
        if(pre.includes(cur)){
            return pre;
        }
        return [...pre,cur];
    },[])
}
/**
* @param {string} str
*/
const stringSet=(str)=>{
    return [...MySet(str.split(''))].join('');
}
console.log(stringSet('abcdfbee'));

2. 树转字符串(深度优先搜索)

要求实现一个 javascript 函数,输入节点 Node,输出渲染结果字符串

javascript 复制代码
//@ts-check
/**
 * @typedef {{text: string;children?: MyNode[]}} MyNode
* @param {MyNode} node
*/
const render=(node)=>{
    return `${node.text}${node.children?.reduce((pre,cur)=>{
        return pre+render(cur);
    },'') ?? ''}`
}
console.log(render({
    text: "hello",
    children: [{
        text: "Hello"
   }],
}))
console.log(render({
text: "Hello",
children: [
{
 text: "World",
 children: [{ text: "1"}]
 },
 { text: "Kitty" }
]
}))

3. React Todo List

设计一个 Todo List 组件

  1. 使用 React 或者 Vue3 编写,可以使用熟悉的 UI 库
  2. 使用 Typescript
  3. 输入框
    1. 用于输入代办事项名称,在输入框中按回车后,将输入框中的文本加入代办列表
    2. [附加题] 支持搜索已输入项目
  4. 代办列表
    1. 展示输入的代办事项名称
    2. 每个代办都可以勾选,表示事项完成,完成项目有特殊的划线样式,项目完成后不能再修改
typescript 复制代码
import { useState } from "react";
import style from './index.module.scss';

export function TodoList () {
  const [inputValue, setInputValue] = useState('');
  const [todoList, setTodoList] = useState<string[]>([]);
  const [searchVal, setSearchVal] = useState('');
  return <><div>
    <input type='search'
      value={searchVal}
      onChange={e => setSearchVal(e.target.value)}
      placeholder='搜索'
    /></div>
    <div>
      <input
        placeholder="输入"
        value={inputValue}
        onChange={e => setInputValue(e.target.value)}
        onKeyDown={e => {
          if (e.keyCode === 13) {
            setTodoList([...todoList, inputValue]);
            setInputValue('');
          }
        }}
      /></div>
    <ul>
      {
        todoList.map(t => <>
          <TODO t={t} searchVal={searchVal} />
        </>)
      }
    </ul>
  </>;
}
const TODO = ({ t, searchVal }: { t: string; searchVal: string; }) => {

  const [isFinish, setIsFinish] = useState(false);
  return <>
    {
      t.includes(searchVal) ? <li className={style['li']}>
        <p
          className={isFinish ? style['finish'] : ''}
        >{t}</p>
        <input type='checkbox'
          onChange={() => {
            setIsFinish(true);
          }}
          disabled={isFinish}
        />
      </li> : null
    }

  </>;
};
scss 复制代码
.finish {
  text-decoration: line-through;
}

.li {
  display: flex;
  align-items: center;
}
相关推荐
梦想科研社8 分钟前
【无人机设计与控制】红嘴蓝鹊优化器RBMO求解无人机路径规划MATLAB
开发语言·matlab·无人机
混迹网络的权某11 分钟前
每天一道C语言精选编程题之求数字的每⼀位之和
c语言·开发语言·考研·算法·改行学it·1024程序员节
一只特立独行的猪6111 小时前
Java面试题——微服务篇
java·开发语言·微服务
码农幻想梦3 小时前
实验九 视图的使用
前端·数据库·oracle
喵手3 小时前
Java 与 Oracle 数据泵实操:数据导入导出的全方位指南
java·开发语言·oracle
硬汉嵌入式4 小时前
H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)
开发语言·junit·小程序·lua
Wx120不知道取啥名4 小时前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
开心工作室_kaic5 小时前
ssm010基于ssm的新能源汽车在线租赁管理系统(论文+源码)_kaic
java·前端·spring boot·后端·汽车
Python私教5 小时前
Flutter颜色和主题
开发语言·javascript·flutter
代码吐槽菌5 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车