JS中常用的数据判断和处理

58 阅读2分钟

数字

小数向下取整,和Math.floor()类似 resultTotalstringnumber时,都能正常转换 resultTotalnullundefined''对象数组时,值为0

~~resultTotal

数组

无论fields是string还是string[],将fields统一转成string[]

const fieldList = ([] as string[]).concat(fields)

过滤数组中为空的元素

  • Boolean 是一个函数,它会对遍历数组中的元素,并根据元素的真假类型,对应返回 true 或 false
schemas.map((item) => item.field).filter(Boolean)

插入指定行

schemaList.splice(index + 1, 0, schemaItem)

对象

删除对象中的某个属性

Reflect.deleteProperty(item, 'field')

数组去重,比较对象某个属性

import { cloneDeep, uniqBy } from 'lodash-es';

uniqBy(schemas, 'field')

往对象中增加属性

Object.assign(target, sources)

判断

常用类型判断

import { isObject, isFunction, isBoolean, isEmpty } from 'lodash-es';

// 判断是否为布尔
isBoolean(data)
// 判断是否为对象
isObject(data)
// 判断是否为函数
isFunction(data)
// 判断是否为数组
Array.isArray(data)

// 判断是否为空
// 对于 null、undefined、空字符串、空数组以及空对象,函数都返回 true
isEmpty(data)

判断两个值是否相同

Object.is(value1, value2)

判断对象中是否存在某个属性

Reflect.has(item, 'field')

判断对象深处的空值

import { each, get } from 'lodash-es';

let arr = [
  { id: 1, tit: "ttt1" },
  { id: 2, tit: "ttt2", bb: { cc: { dd: 12 } } },
  { id: 3, tit: "ttt3", bb: {} },
  { id: 5, tit: "ttt5", bb: { cc: { dd: "" } } },
  { id: 6, tit: "ttt6", bb: { cc: { dd: null } } },
];

each(arr, (item) => {
  let flag = get(item, ["bb", "cc", "dd"]);
  if (flag) {
    console.log(item);
  }
});

其它

变量为false时才进行赋值操作

let x = 10;
let y = 0;
x ||= 5; // x仍为10,因为10被视为真值
y ||= 5; // y现在为5,因为0被视为假值
  • 获取树结构中所有的key
const getAllKeys = (treeData: any[], defaultKeys = []) => {
  return treeData.reduce((prev, curr: API.DeptEntity) => {
    prev.push(curr.id);
    if (curr.children?.length) {
      getAllKeys(curr.children, prev);
    }
    return prev;
  }, defaultKeys);
}
  • 筛选出符合关键字的树结构
const filterDeptByKeyword = (treeData: API.DeptEntity[], keyword = '') => {
  return treeData.filter((item) => {
    if (item.children?.length) {
      item.children = filterDeptByKeyword(item.children, keyword);
      if (item.children.length) {
        return true;
      }
    }
    return item.name?.includes(keyword);
  });
};