JavaScript代码片段

414 阅读4分钟

1.获取图书馆名称

export function libraryNameString(libraryList, libraryString) {
    let string = '';
    //let serviceArray = [];
    if (libraryList) {
        libraryList.forEach(i => {
            if (libraryString ===  i.code) {
                string = i.name
                //serviceArray.push(i.name)
            }
        });
    }
    return string;
}

2.获取文件后缀名

/**
 * 获取文件后缀名
 * @param {String} filename
 */
export function getExt(filename) {
    if (typeof filename == 'string') {
        return filename
            .split('.')
            .pop()
            .toLowerCase()
    } else {
        throw new Error('filename must be a string type')
    }
}

3. 复制内容到剪贴板

 export function copyToBoard(value) {
    const element = document.createElement('textarea')
    document.body.appendChild(element)
    element.value = value
    element.select()
    if (document.execCommand('copy')) {
        document.execCommand('copy')
        document.body.removeChild(element)
        return true
    }
    document.body.removeChild(element)
    return false
}

4. 数组去重

/**
 * 数组去重
 * @param {*} arr
 */

const arr = [1,3,4,5,2,2,1,2];

// 数组去重复1
function unique(arr) {
    if (!Array.isArray(arr)) {
        throw new Error('不是一个数组')
    }
    return [...new Set(arr)]
}

// 数组去重复2
function unique(arr) {
    return Array.from(new Set(arr))
}

// 数组去重复3
function unique(arr) {
    const brr = []
    for(let i = 0;i<arr.length;i++){
        if(brr.indexOf(arr[i]) == -1){
            brr.push(arr[i])
        }
    }
    return brr
}
// 数组去重复4
function unique(arr) {
    arr = arr.sort()
    const brr = []
    for(let i = 0; i<arr.length; i++){
        if(arr[i] !== arr[i-1]){
            brr.push(arr[i])
        }
    }
    return brr
}
console.log(unique(arr))

5. 数组对象去重

( )

/**
 * 数组去重
 * @param {*} arr
 */


uniqBy(arr,'id')
uniqWith(arr,isEqual)
let arr = [{title:'tom'},{title:'tom'},{title:'jack'},{title:'kang'}];

let obj = {};
let newArr = cloneDeep(arr);
newArr = newArr.reduce((item, next) => {
    obj[next.label] ? '' : (obj[next.label] = true && item.push(next));
    return item;
}, []);

let list = [];
const newArr = arr.reduce((prev,current)=>{
    if(!list.includes(current['title'])){
        list.push(current['title'])
        prev.push(current)
    }
    return prev
},[])

console.log(newArr)

filter = (arr, prop) => {
 const keys = [];
   const newArr = arr.reduce((prev, current) => {
     if (!keys.includes(current[prop])) {
     keys.push(current[prop]);
       prev.push(current);
     }
     return prev;
    }, []);
   return newArr;
};

6. 保留小数点以后几位,默认2位

// 保留小数点以后几位,默认2位
export function cutNumber(number, no = 2) {
    if (typeof number != 'number') {
        number = Number(number)
    }
    return Number(number.toFixed(no))
}

const round = (n, d) => Number(Math.round(n + "e" + d) + "e-" + d) 
round(1.005, 2) //1.01 
round(1.555, 2) //1.56

7. 对象转化为formdata

 function getFormData(object) {
    const formData = new FormData()
    Object.keys(object).forEach(key => {
        const value = object[key]
        if (Array.isArray(value)) {
            value.forEach((subValue, i) =>
                formData.append(key + `[${i}]`, subValue)
            )
        } else {
            formData.append(key, object[key])
        }
    })
    return formData
};
let req={
    file:'1.txt',
    userId:1,
    phone:'15198763636',
    //...
}
fetch(getFormData(req))

8. 简单的深拷贝

/**
 *深拷贝
 * @export
 * @param {*} obj
 * @returns
 */
export function cloneDeep(obj) {
    if (typeof obj !== 'object') return obj;
    let result = Array.isArray(obj)?[]:{};
    for (let i in obj){
        if(obj.hasOwnPorperty(i)){
            result[i]=cloneDeep(obj[i])
        }
    }
    return result
}

9. 生成随机字符串

/**
 * 生成随机id
 * @param {*} length
 * @param {*} chars
 */
export function uuid(length, chars) {
    chars =
        chars ||
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    length = length || 8
    var result = ''
    for (var i = length; i > 0; --i)
        result += chars[Math.floor(Math.random() * chars.length)]
    return result
}

10. 时间排序

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 ab,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。\
若 a 等于 b,则返回 0。\
若 a 大于 b,则返回一个大于 0 的值。
/**
 * 时间排序
 * @param {*} length
 * @param {*} chars
 */
var data = [
  { name: "1", time: "2019-04-26 10:53:19"},
  { name: "2", time: "2019-04-26 10:51:19"},
  { name: "3", time: "2019-04-26 11:04:32"},
  { name: "4", time: "2019-04-26 11:05:32"},
];
data.sort(function (a, b) {
  return a.time < b.time ? 1 : -1;
});

11. js两个数组对象合并成一个数组对象

var obj1 = [{
  "id": 980550455852,
}, {
  "id": 980550566221,
}];

var obj2 = [{
  "price": "6666"
}, {
  "price": "8888"
}];
var obj = obj1.map((item,index) => {
    return {...item, ...obj2[index]};
});
console.log(obj);

1.jpg

11. js对象value相加 num

let = numbeAdd={id:0,name:1,num:3}
Object.values(numbeAdd)
      .map(Number)
      .reduce((sum, current) => {
        return sum + current;
      }, 0);

12. js两个数组对象根据id去重

const arr1Id = Arr1.map((i) => i.id);
let removalArr = Arr2.filter((item: any) => {
    if (arr1Id.includes(item.id)) return item;
});

const index = list.findIndex((d: string) => d.uid === file.uid);
if (index !== -1) {
   list.splice(index, 1);
}

13. js数组对象根据多个对象值的替换

let Arr = [
    {id:'a',value:'1',name:'one'},
    {id:'b',value:'2',name:'two'},
]

let obj1 = {a:'aa'}
let obj2 = {b:'bb'}
 Arr.forEach((item: any) => {
      if (obj1[item.id]) {
        item.value = obj1[item.id];
      }
      if (obj2[item.id]) {
        item.name = obj2[item.id];
      }
});
console.log(Arr)

2.jpg

14. 校验类型

export const isNumber = (e) =>{ 
    return Object.prototype.toString.call(e).slice(8,-1) === 'String' 
}

15. 获取字符串中某个字符出现的频率

const fun = (str) => {
  if (!str) return;
  let obj = {};
  for (let i = 0; i < str.length; i++) {
    obj[str[i]] = str.split(str[i]).length - 1;
    //str.split(str[i]).length - 1 // 某个字符出现的次数
  }
  if (JSON.stringify(obj) === '{}') return;
  let num = Object.values(obj)
    .filter((f) => f)
    .sort(function (a, b) {
      return b - a;
    })[0];
  let str2 = '';
  for (let j in obj) {
    if (obj[j] === num) {
      str2 = j;
    }
  }
  console.log('出现频率最高的为:', str2, num);
};

fun('dasgjashgjkchdskvsad')

16. 判断是否为数组

const arr = [1,3,4,5,2,2,1,2];
console.log(Array.isArray(arr))
console.log(arr instanceof Array || arr instanceof Object)
console.log(Object.prototype.toString.call(arr).slice(8,-1) === 'Array')
console.log(arr.constructor.toString().indexOf('Array') !== -1)
console.log(Array.prototype.isPrototypeOf([]))