js对象排序有几种方法(js中对象数组排序的方法)

js对象排序有几种方法(js中对象数组排序的方法)数组方法:

arr.splice(start,删除元素个数,添加元素1,元素2)删除数组元素(并替换改变原数组

arr.slice(start,end)返回一个新数组,将所有从索引 start 到 end(不包括 end)的数组项复制到一个新的数组

arr.concat(arr1,arr2,1,2)拼接数组生成一个新数组可以传入数组或者值

arr.forEach((item,index,array)=>{})函数作为一个参数 为数组的每个元素都运行一个函数。该函数没有返回值

数组搜索:按索引

arr.indexOf(item, from)从索引 from 开始搜索 item,如果找到则返回索引,否则返回 -1。

arr.lastIndexOf(item, from)—— 和上面相同,只是从右向左搜索。

arr.includes(item, from)—— 从索引 from 开始搜索 item,如果找到则返回 true(译注:如果没找到,则返回 false)

注意:

这些方法使用的是严格相等 === 比较所以如果我们搜索 false,会精确到的确是 false 而不是数字 0。

如果我们想检查是否包含某个元素,并且不想知道确切的索引,那么 arr.includes 是首选。

此外,includes 的一个非常小的差别是它能正确处理NaN,而不像 indexOf/lastIndexOf

数组搜索:按特定条件搜索

arr.find((item,index,array)=>{…})如果返回 true,则返回 item并停止迭代;对于假值(falsy)的情况,则返回 undefined

arr.findIndex(()=>{})同find 凡是返回的是找到元素的索引而不是元素本身,并且在未找到任何内容时返回 -1。

arr.filter(()=>{})find直接返回第一个符合条件的元素,如果有多个可以用filter,返回的是所有匹配元素组成的数组

转换数组:

arr.map((item,index,array)=>{})它对数组的每个元素都调用函数,并返回结果数组。

arr.sort(): 对数组进行原位(in-place) 排序

arr.reverse()颠倒数组中的元素,改变原数组,也返回颠倒后的数组

str.split(‘,’,3)将字符串中逗号处分隔为字符串并取出前三个元素返回新数组

arr.join(‘,’)使用逗号连接数组返回一个字符串

reduce()累加器let value =arr.reduce(function(accumulator, item, index, array){// …},[initial]);

let arr = [1, 2, 3, 4, 5];let result = arr.reduce((sum, current) => sum current, 0);alert(result); // 15复制代码检查是否为数组:

Array.isArray(arr)返回布尔值 可以区别对象和数组

arr.some(fn)

arr.every(fn)对数组的每个元素调用函数 fn。如果任何/所有结果为 true,则返回 true,否则返回 false。

其他

arr.fill(value, start, end)—— 从索引 start 到 end,用重复的 value 填充数组。

arr.copyWithin(target, start, end)—— 将从位置 start 到 end 的所有元素复制到 自身 的 target 位置(覆盖现有元素)。

arr.flat(depth)/arr.flatMap(fn)从多维数组创建一个新的扁平数组。

展开多维数组,该方法返回一个新数组,对原数据没有影响。

flat() 方法的参数是一个整数,表示想要拉平的层数,默认为1,表示拉平一层。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数

Array.of(element0[, element1[, …[, elementN]]])基于可变数量的参数创建一个新的 Array 实例,而不需要考虑参数的数量或类型

entries(),keys() 和 values() 方法三个方法都返回一个遍历器对象,可以用for…of循环进行遍历

数组方法的应用遍历数组

当我们需要遍历一个数组时 —— 我们可以使用 forEach,for 或 for..of。

当我们需要遍历并返回每个元素的数据时 —— 我们可以使用 map。

数组去重使用Setlet arr = [100, 234, 2342,1112, 100, 300, ‘100’, ‘hello’, ‘hello’, NaN, NaN];let newArr = […new Set(arr)]; 复制代码使用reduce includesfunction unique(arr){ return arr.reduce((prev,cur)=>prev.includes(cur) ? prev :[…prev,cur],[])}复制代码数组拷贝浅拷贝

扩展运算符 var newArr = […arr]

利用concat方法,不写参数 var newArr = arr.concat();

利用数组截取 var newArr = arr.slice(0)

深拷贝

JSON

let obj2=JSON.parse(JSON.stringify(obj1));复制代码

递归实现

//定义函数 获取对象的构造函数(类)名function getObjectClass(obj) { return Object.prototype.toString.call(obj).slice(8,-1)}//深拷贝的函数function deepClone(obj) { //判断obj是对象是数组还是其他 if (getObjectClass(obj) === ‘Object’) { var res = {}; //创建空的对象 } else if (getObjectClass(obj) === ‘Array’) { var res = []; //创建空数组 } else { return obj; //直接把参数返回 } //对传入的对象(遍历)进行遍历 for (let i in obj) { res[i] = deepClone(obj[i]); } //返回新数组或对象 return res;}复制代码

转自:https://juejin.cn/post/6980556008481357861

发表评论

登录后才能评论