该方法可以将类数组对象转换为数组,所谓类数组对象,就是含 length 和索引属性的对象
返回的数组长度取决于对象 length 属性的值,且非索引属性的值,或索引大于 length 的值都不会被返回到数组中
实锤如下
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33,
'length': 3,
'name': 330
}
let arr = Array.prototype.slice.call(obj)
// [3, 13, 23]
简洁写法 [].slice.call(obj)
该方法可以将类数组对象和可迭代对象转换为数组
类数组对象上文已提及,何为可迭代对象?
document.getElementsByTagName("div") 返回的是可迭代对象但不是一个数组
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
function *createIterator(obj){
for(let value in obj){
yield obj[value]
}
}
let iterator = createIterator(obj)
let arr = Array.from(iterator)
// [3, 13, 23, 33]
默认情况下,开发者定义的对象都是不可迭代对象,但如果给 Symbol.iterator 属性添加一个生成器,则可以将其变为可迭代对象
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
obj[Symbol.iterator] = function* () {
for(let value in this){
yield this[value]
}
}
let arr = Array.from(obj)
// [3, 13, 23, 33]
typeof obj[Symbol.iterator] === 'function'
for of 用于循环可迭代对象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一个可迭代对象,可以用 for of 遍历
此外,用 for of 循环对象时可以通过 break 提前终止,而 forEach 无法提前跳出循环
for in 遍历对象的可枚举属性,包括其原型链上的属性,且不保证顺序
若要遍历对象自身的可枚举属性,使用 hasOwnProperty() 方法来确定属性是否时对象自身属性
Object.getOwnPropertyNames(obj), 返回对象自身可枚举或不可枚举属性
反正已经扯远了,那就再扯远一点, Object.assign() 方法将所有可枚举属性的值从一个或多个源对象复制到目标对象
展开运算符可以将可迭代对象转换为数组
例如,[...'obj'] 返回 ["o", "b", "j"]
字符串去重
[...new Set('objobj')]
默认情况下,开发者定义的对象都是不可迭代对象,但提供了返回迭代器的方法
通过使用这些方法,可以返回相关的数组
与类数组对象需要对象有 length 值不同,Object.values(obj) 返回对象自身可枚举属性值的集合
let obj = {
'0': 3,
'1': 13,
'2': 23,
'3': 33
}
let arr = Object.values(obj) // [3, 13, 23, 33]
在很大程度上,可以将字符串看成字符串数组,
都有 length 属性
都有 concat() / indexOf() / includes() / slice() 方法
不过值得注意的是, string 上没有方法可以原地修改它自身的内容,都是返回新的 string
string 还有个 repeat() 方法,创建指定数量的字符串副本
来源:https://segmentfault.com/a/1190000013579180
简单说一下arguments,arguments 就是函数内一个內建对象,它包含函数接收到的所有变量;所以,在实际开发中,我们使用arguments可以很方便的获取到所有的实参,并且也需要对其使用是写数组的方法
数组总共有22种方法,本文将其分为对象继承方法、数组转换方法、栈和队列方法、数组排序方法、数组拼接方法、创建子数组方法、数组删改方法、数组位置方法、数组归并方法和数组迭代方法共10类来进行详细介绍
不改变原数组:concat();join();slice();toString(),改变原数组:pop();push();reverse();shift();unshift();sort();splice(),array.concat(array)连接两个或多个数组,返回被连接数组的一个副本
如何快速的创建一个包含100个元素的数组, 最初见到的问题是如何创建100个为元素为0 的数组,研究了一系列的方法,包含Es6 新的API ,不得不说, ES6 好强大!
在过去的数个月里,我注意到在我审阅的 pull request 中有四个(关于数组使用的)错误经常出现。同时,我自己也会犯这些错误,因此有了这篇文章。让我们一起学习,以确保以后能正确地使用数组方法!
for in 和 for of 相对于大家肯定都不陌生,都是用来遍历属性的没错。for ... in 循环返回的值都是数据结构的 键值名。遍历对象返回的对象的key值,遍历数组返回的数组的下标(key)。for of 循环用来获取一对键值对中的值,而 for in 获取的是 键名
在深入研究一些更高级的用法之前,让我们看一下slice方法的基础知识。如MDN文档,slice 是数组上的一个方法,它最多有两个参数,从该索引处开始提取原数组中的元素,如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取
在前端开发中,相信大家都遇到过数组和字符串相互转换的情况 ,JavaScript提供了split()和join()这2个函数来进行转换,下面就介绍数组对象和字符串的相互转换。
JavaScript实现普通数组去重,讲解各种算法的思想和改进方法,已经他们的优缺点...利用数组的reduce方法,使用了filter方法,利用ES6去重,相对来说更为简单
ES6为Array增加了from函数用来将其他对象转换成数组,Array.from可以接受三个参数,我们看定义:Array.from(arrayLike [, mapFn [, thisArg]])。arrayLike:被转换的的对象。 mapFn:map函数。 thisArg:map函数中this指向的对象。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!