数组 字符串 对象的常用方法

目录

数组

数组合并  

通过设置长度,移除数组中长度之后的数据

map 方法 字典对象转下拉使用的数组

map 方法,数组转为数组对象

sort排序的注意事项

数组基本方法

数组转对象  

ES5新增的一些方法

ES6数组新增的扩展方法

reduce() 方法,为数组中的每一个元素依次执行回调函数

用来相加数组或对象的值

统计一个数组中有多少个不重复的单词

数组求和

合并二维数组

字符串

字符串使用Set去重

对象

数据的类型转换

处理时间格式的js函数

lodash 方法

安装引入

数组方法

concat  可以将数组和其他数组拼接

findIndex  find 可以传入多种检索方法

intersection  返回所有传入数组的相同元素并组成新数组

union  返回所有传入数组拼接后的数组,并去重

uniq  数组去重

head / last  返回数组第一个元素与最后一个元素

深拷贝

对象方法

get  获取数据路径,防止重复判断路径,也可设置默认值

set  根据数据路径修改数据,会改变对象,路径不存在就创建

merge  合并对象,路径重复后者覆盖前者

omit  剔除指定属性

实用函数

cloneDeep 深拷贝

throttle 创建一个节流函数

debounce 创建一个防抖函数


数组

数组去重 只适用于简单数据  data = [...new Set(data)] 

数组合并  

第一种:let arr1 = arr1.concat(arr2,arr3)

第二种: [...arr1,...arr2,...arr3]

通过设置长度,移除数组中长度之后的数据

map 方法 字典对象转下拉使用的数组

   this.disposeStatus = [
            ...Object.keys(dispose_status).map(item => ({
              label: dispose_status[item],
              value: item,
            })),
   ];

map 方法,数组转为数组对象

// 现有数组
let arr = ['你好','中国'];
this.options = states.map((item) => {
  return { value: `${item}`, label: `${item}` };
});
console.log(this.options)
// [{value:"你好",label:"你好"},{value:"中国",label:"中国"}]

sort排序的注意事项

1 sort 排序默认为是  a-b  即升序排序,而此时如果对应属性为 null ,或者无法进行排序,这个数据将会被放在最前方

let arr = [null,undefined,2,1,3];
arr.sort((a,b)=>{
  return a-b
});
console.log(arr)
// 
[null,undefined,1,2,3]

2 设置 sort 排序为  b-a ,即降序排序时,对应属性为 null 或无法进行排序,这个数据将会放在最后面,

let arr = [null,undefined,2,1,3];
arr.sort((a,b)=>{
  return b-a
});
console.log(arr)
// 
[3,2,1,null,undefined]

3 如果想要即是升序排序,而不能排列的值放在最后面时,可以使用以下方法

let arr = [null,undefined,2,1,3];
arr.sort((a, b)=> {
    return (b != null || b != undefined ) - (a != null || a != undefined) || a - b;
  });
console.log(arr)
// 
[1,2,3,null,undefined]

数组基本方法

pop()  数组末尾删除 返回数组中被删除的元素

shift() 数组头部删除 返回值是数组中被删除的元素

push() 数组末尾添加 返回的是添加后的数组的长度      

unShift() 数组头部添加 返回的是添加后的数组的长度

reverse()  翻转数组      

slice(a,b) 数组从第a个下标开始截取到下标b,包含a,不包含b,

返回值是被截取的数据

如果只有一个参数,从参数的下标直接截取到末尾 不改变原数组

splice(a,b,c); 方法:从索引a开始截取b个元素,并用c替换截取的元素,并改变原来的数组

splice(a,b) 从索引a开始截取,截取b个元素, 返回值是被截取的数据

concat()  用于拼接数组,不会改变原有数组     使用: var arr2 = arr1.concat()

数组转字符串:数组名.join(分隔符)

数组转对象  

let arr =[a,b,c,d]   
var obj ={ ...arr }
//obj的值为 {0:a, 1:b, 2:c, 3:d}

ES5新增的一些方法

forEach 数组遍历 

filter  数组内容过滤,返回一个新数组

some    查找数组中是否有满足条件的元素,只要有一个就返回true。

every   查找数组所有元素是否满足条件全部满足返回true,有一个不满返false

trim    快捷方法去除字符串两端的空格

使用方法:

var newArr = arr.新增方法((item,i)=> {  return 条件代码 })

item 当前元素   i 当前下标  这里的return不能终止函数,只是用来设置返回值

ES6数组新增的扩展方法

Array.from()  将伪数组或可遍历对象转换为真正的数组

Array.find()   找到第一个符合条件就返回数据,没有就返回undefined

Array.findIndex() 找到第一个符合条件就返回下标,没有就返回-1

includes() 判断是否含有这个值,返回值为true和false

Array.fill()  用于数据的初始化和修改某一位置的数据

['a', 'b', 'c'].fill(7)
// [7, 7, 7]
new Array(3).fill(7)
// [7, 7, 7]  第一个参数表示填充的数据,默认全部修改
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']  第二个和第三个参数,用于指定填充的起始位置和结束位置

Array.flat()  用于将数组中嵌套的数组拉平,该方法返回一个新数组,对原数据没有影响

[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]  没有参数默认拉平一层
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]  有参数表示想要拉平的层数
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]  表示不论有多少层,全都拉平
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5] 有空格会跳过

reduce() 方法,为数组中的每一个元素依次执行回调函数

用来相加数组或对象的值

 let total = 0;
  '存储最后结果的变量' = '要累加的数组或对象'.reduce(function (
   pre,
   item
  ) {
    return pre + item.value;
  },
    total);

统计一个数组中有多少个不重复的单词

var arr = ["apple","orange","apple","orange","pear","orange"]; 
function getWordCnt(){ 
  return arr.reduce(function(prev,next){ 
    prev[next] = (prev[next] + 1) || 1; 
    return prev; 
  },{}); 
} 
console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}

数组求和

var arr = [1,5,8,6,15,78,65,25,48,55]
var sum = arr.reduce(function(total,currentValue){
  return total+currentValue;
});
console.log(sum);//306

合并二维数组

var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
var oneArr = twoArr.reduce(function(total,currentValue){
  return total.concat(currentValue);
})
console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

字符串

Math.PI() 圆周率      Math.abs() 绝对值,取正整数      Math.max()最大值

Math.min() 最小值     Math.floor() 向下取整            Math.ceil() 向上取整

Math.round() 四舍五入 ,但是.5向上取    

Math.random() 取随机数 [0,1)取到0,但是不能取到1

charAt ( i )  找到索引对应的字符串

str [ i ]  找到索引对应的字符串,从0 开始,必须是 [ ]

.concat() 拼接字符串

slice(a,b) 从下标a的位置截取到下标b,不包含b ,返回值是被截取的数据,不改变原数据

          只有一个参数,就是从对应下标直接截取到末尾

substring(a,b) 从下标a的位置截取到下标b,不包含b ,返回值是被截取的数据,不改变原数据

           只有一个参数,就是从对应下标直接截取到末尾

            如果第一个参数为负数的话,会自动转化为0,从索引0开始截取

substr(a,c) 从下标a开始截取b个,返回值是被截取的元素,不会改变原数据

           如果还有一个参数,从下标a直接截取到末尾,不改变原数据

indexOf()  从前往后查找字符串对应的索引

lastIndexOf() 从后往前查找字符串对应的索引

search() 返回字符串对应的索引

match() 返回找到的字符串,没有就返回null

toFixed() 保留字符串的几位小数

padStart() 字符串从前填充,第一个参数, 填充到多少位; 第二个参数, 用什么来填充

 padEnd() 字符串从后填充,第一个参数, 填充到多少位; 第二个参数, 用什么来填充

const message = "Hello";

// 在开头用a填充到10位
console.log(message.padStart(10, "a")); // aaaaaHello
// 在结尾用b填充到10位
console.log(message.padEnd(10, "b")); // Hellobbbbb

replace() 替换字符串对应字符

var str = 'ab12ba21/k1'
替换第一个指定字符
str.replace('a','z');  //'zb12ba21/k1'
替换全部指定字符
str.replace(/a/g,'z');  //'zb12bz21/k1'
替换特殊字符
str.replace(/\//,'?');  //'ab12ba21?k1'

字符串转数组:字符串名.split(分隔符)

字符串使用Set去重

[...new Set('ababbc')].join('')

注意:使用 Set 去重后,将会被转化为数组,所以要使用 join 将其再次转化为字符串

对象

对象的forEach循环 obj.forEach(value,key,index) { }

              value是键值对的值  key是键值对的键  index是下标

对象转数组: Array.from() 将伪数组或可遍历对象转换为真正的数组

                     Object.keys(obj) 以数组的形式返回所有对象中的key

Object.values(obj) 以数组的形式返回所有对象中的value

Object.entries(obj) 返回一个给定对象自身可枚举属性的键值对数组

const obj = {
  name: "why",
  age: 18,
  height: 1.88,
};

console.log(Object.entries(obj)); // [['name', 'why'], ['age', 18], ['height', 1.88]]

const arr = [10, 20];
const str = "ab";

console.log(Object.entries(arr)); // [['0', 10], ['1', 20]]
console.log(Object.entries(str)); // [['0', 'a'], ['1', 'b']]

Object.assign   用于对象的合并  方法:var copyObj = Object.assign({}, obj);

数据的类型转换

转换字符串  toString( )    string( )    给字符拼接一个‘

转换数字    parseInt( ) 不保留小数

            parseFloat( ) 保留小数

            Number( ) 其中有一个数据不能转换就是NaN

转换布尔值  Boolean( ) 其中0 ‘’undefiend null NaN转换后是false

数组转字符串  Array.join ( ' ' )

字符串转数组:字符串名.split(分隔符)

处理时间格式的js函数

moment('时间戳').format('YYYY-MM-DD HH:mm:ss')

HH:mm:ss  24小时格式               hh:mm:ss   12小时格式

lodash 方法

安装引入

npm i --save lodash lodash-es

数组方法
 

concat  可以将数组和其他数组拼接

// 可对concat设置别名lodashConcat
import { concat as lodashConcat } from 'lodash-es'

// 用lodash前:要注意两个都是数组类型才能拼接,返回新数组。concat用于简单的数组中是深拷贝,用于复杂的数组是浅拷贝
const arr1 = [1, 2, 3]
const arr2 = [5, 6, 7]
const resArr = arr1.concat(arr2)
console.log(resArr) // [1, 2, 3, 5, 6, 7]

// 用lodash后:可将array与任何数组 或 值连接在一起,返回新数组。
const resultArr = lodashConcat(arr1, arr2, 11)
console.log(resultArr) // [1, 2, 3, 5, 6, 7, 11]

findIndex  find 可以传入多种检索方法

import { findIndex as lodashFindIndex } from 'lodash-es'

// 用lodash前:用原生的数组方法findIndex,只有一种写法检索方式。
const users = [
  { user: 'barney', active: false },
  { user: 'fred', active: false, name: 'winne' },
  { user: 'pebbles', active: true }
]
const resIndex = users.findIndex((item) => item.user === 'barney') // 0

// 用lodash后:可以传入多种检索方式。
const resultIndex1 = lodashFindIndex(users, (item) => item.user === 'barney') // 0
const resultIndex2 = lodashFindIndex(users, { user: 'fred', active: false }) // 1
const resultIndex3 = lodashFindIndex(users, ['active', false]) // 0

intersection  返回所有传入数组的相同元素并组成新数组

import { intersection } from 'lodash-es'

const arr1 = [2, 1]
const arr2 = [4, 2]
const arr3 = [1, 2]
const arr4 = []
const newArr = intersection(arr1, arr2, arr3) // [2]
const newArr2 = intersection(arr1, arr2, arr4) // []

union  返回所有传入数组拼接后的数组,并去重

import { union } from 'lodash-es'

const arr1 = [2, 3]
const arr2 = [1, 2]
const resArr = union(arr1, arr2) // [2, 3, 1]

uniq  数组去重

import { uniq } from 'lodash-es'

const arr1 = [2, 3, 2, 4, 5]
const resArr = uniq(arr1) // [2, 3, 4, 5]

head / last  返回数组第一个元素与最后一个元素

import { head, last } from 'lodash-es'

const arr = [1, 2, 3]
const headItem = head(arr) // 1
const lastItem = last(arr) // 3

深拷贝

const deepCopy = (obj) => {
  if (obj === null) return obj
  if (obj instanceof Date) return new Date(obj)
  if (obj instanceof RegExp) return new RegExp(obj)
  if (typeof obj !== 'object') return obj
  let newObj = new obj.constructor()
  for (let key in obj) {
    newObj[key] = deepCopy(obj[key])
  }
  return newObj
}

对象方法

get  获取数据路径,防止重复判断路径,也可设置默认值

import { get } from 'lodash-es'

const object = {
  a: [{ b: { c: 3 } }],
  info: { name: 'winne', age: '18' }
}
// 传入属性字符串路径方式
const res1 = get(object, 'a[0].b.c') // 3

// 传入属性数组方式
const res2 = get(object, ['a', '0', 'b', 'c']) // 3

// 最后一个参数为设置找不到时的默认值
const res3 = get(object, 'info.like', 'wa') // 'wa'

const res4 = get(object, 'a[0].b.c.d.f') // undefined

set  根据数据路径修改数据,会改变对象,路径不存在就创建

const obj = {
  a: [{ id: 1, name: 'winne', age: 18 }],
  b: 11,
  c: 33
}
set(obj, 'a[0].like', 'hi')
set(obj, 'a[0].say.my', 'hello')
set(obj, ['d', 'j'], 'come')
/** obj的值:
  {
    a: [{ id: 1, name: 'winne', like: 'hi', age: 18, say: { my: 'hello'} }],
    b: 11,
    c: 33,
    d: { j: 'come'}
  }
  */

merge  合并对象,路径重复后者覆盖前者

import { merge } from 'lodash-es'

const obj = {
  a: [{ id: 1, name: 'winne', age: 18 }],
  b: 11
}
const other = {
  a: [{ name: 'xf', age: 10 }],
  b: 1,
  c: 33
}
const regMerge = merge(obj, other)
/** regMerge的值:
 * {
    a: [{ id: 1, name: 'xf', age: 10 }],
    b: 1,
    c: 33
  }
  */

omit  剔除指定属性

import { omit } from 'lodash-es'

const obj = {
  a: [{ id: 1, name: 'winne', age: 18 }],
  b: 11,
  c: 33
}
const reg = omit(obj, ['a[0].age', 'b', 'c']) // { a: [{ id: 1, name: 'winne' }] }

实用函数

cloneDeep 深拷贝

import { cloneDeep } from 'lodash-es'

const obj = {
  a: 111,
  b: {
    arr: [1, { b: 55 }, 33]
  }
}
const copyObj = cloneDeep(obj) // copyObj为obj深拷贝后的值

throttle 创建一个节流函数

import { throttle } from 'lodash-es'

const fn = throttle(() => {
  console.log('节流函数执行了')
}, 500)
window.addEventListener('resize', fn)

debounce 创建一个防抖函数

import { debounce } from 'lodash-es'

const fn = debounce(() => {
  console.log('防抖函数执行了')
}, 500)
// 这个例子不太合适,仅供看效果
window.addEventListener('resize', fn)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值