Js
http://ll3462540450.gitee.io/blog/html/es.html#promise
Array.from()
Array.from()方法就是将一个类(伪)数组对象或者可遍历对象转换成一个真正的数组。
1.所谓类(伪)数组对象,最基本的要求就是具有length属性的对象(但是没有数组的方法)
2.该类数组对象的属性名必须为数值型或字符串型的数字 ( 该类数组对象的属性名可以加引号,也可以不加引号)
const obj = {
0:'a',
1:'b',
2:'c',
length:3
}
// length 的长度 = 数字的长度 没有的用 ‘undefended’ 占位
// 如果把类数组的length 属性去掉 没有了length的类数组对象. 用Array.form() 就会得到一个空数组
// 1.对象转化为数组
const newArr = Array.from(obj)
newArr.push('d')
console.log(newArr); //[ 'a', 'b', 'c','d' ]
// 2.数组转化为数组对象
const newArrObj = newArr.map((item,index)=>{
return {
name:item,
key:index
}
})
console.log(newArrObj); //[ { name: 'a', key: 0 }, { name: 'b', key: 1 }, { name: 'c', key: 2 } ]
Object.keys()
Object.keys()方法的作用:遍历对象
返回结果:返回对象中每一项key的数组
1.属性名的类型是Number
,那么Object.keys
返回值是按照key从小到大排序
2.属性名的类型是String、Symbol
,那么Object.keys
返回值是按照属性被创建的时间升序排序。
const obj = {
100: '一百',
2: '二',
7: '七'
}
Object.keys(obj) // ["2", "7", "100"] //可以自动排序
Object.keys()方法可以结合forEach来使用
// 过滤对象中的 value = 0 并将其置为空
let params = {
name: 0,
age: 0,
work: 'frontend'
}
方法一:
for (let item in params) {
if (typeof (params[item]) === "number" && (params[item]) === 0) {
params[item] = params[item].replace = ''
}
}
方法二:
Object.keys(params).forEach((key,index) => {
if(params[key] === 0) {
params[key] = ''
}
});
// params { name: '', age: '', work: 'frontend' }
Array.prototype.includes()
include()的作用,是查找一个值在不在数组里,若在返回true,反之返回false
['a', 'b', 'c'].includes('a') // true
['a', 'b', 'c'].includes('d') // false
Array.prototype.includes()方法接收两个参数: 要搜索的值和搜索的开始索引。当第二个参数被传入时,该方法会从索引处开始往后搜索(默认索引值为0)。若搜索值在数组中存在则返回true,否则返回false。
['a', 'b', 'c', 'd'].includes('b') // true
['a', 'b', 'c', 'd'].includes('b', 1) // true
['a', 'b', 'c', 'd'].includes('b', 2) // false
Array.prototype.indexOf()
indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在返回-1。
注意:返回找到的索引或者不存在的-1,且不改变原数组
语法:arr.indexOf(searchElement[, fromIndex = 0])
Array.prototype._indexOf = function(){
if(this === null){throw new TypeError('"this" is null or not defined');}
let that = Object(this),len = that.length >>> 0,param = arguments;
if(param[1] && Math.abs(param[1])>= len)return -1;
startIndex = Math.max((param[1] ? param[1] : 0), 0) ;
while(startIndex < len){
if(startIndex in that && param[0] === that[startIndex])return startIndex;
startIndex++;
}
return -1;
Array.prototype.findIndex()
findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引,若没有找到对应元素则返回-1。
const array = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array.findIndex(isLargeNumber)); // expected output: 3
Array.prototype.fill(value,start,end)
fill() 用于数组元素的填充
arry.fill(value,sart, end)它本身是接受三个值的,第一个是我们将要替换成的值,第二个是我们选择替换开始的地方,第三个值是替换结束的地方;start 和 end 参数是可选的, 其默认值分别为 0 和 this 对象的 length 属性值。
const test = [1, 2, 3, 4];
// 仅仅传一个参数的情况
console.log(test.fill(1)); //[1, 1, 1, 1]
//传递两个参数的情况
console.log(test.fill(2,2)) //[1,2,2,2]
// 传递三个参数的情况
console.log(test.fill(1, 1, 2)); //[1,1,1,4]
Object.values()
使用Object.values()遍历对象的属性值,无需使用属性名
let obj = {a: 1, b: 2, c: 3}
Object.values(obj).forEach(value =>{ console.log(value); // 输出1, 2, 3})
Object.some()
some()方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
let arr = [
{ value: 'apply' },
{ value: '' }
]
let res = arr.some(item => item.value !== '' ) // true
Object.every()
every()方法测试一个数组内是不是所有元素都能通过某个指定函数的测试。它返回一个布尔值。
const arr = [
{ value: 'apply' },
{ value: '1' }
]
const res = arr.every(item => item.value !== '') // true
Object.find()
find()方法返回数组中满足提供的测试函数的第一个元素的值,否则返回 undefined。
const arr = [
{ value: '' },
{ value: '11' }
]
const res = arr.find(item => item.value !== '')
Object.entries()
Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
通俗点就是 Object.entries() 可以把一个对象的键值以数组的形式遍历出来,结果和 for...in 一致,但不会遍历原型属性
let obj = {a: 1, b: 2, c: 3};
Object.entries(obj).forEach(([key, value]) =>{
console.log(key + "- " + value); // 输出a- 1, b- 2, c- 3
})