js数组操作方法

269 阅读4分钟
方法名对应版本功能原数组是否改变返回值
concatES5-合并数组N合并之后的新数组
joinES5-使用分隔符N组成的字符串
pushES5-在最后一位新增一或多个元素Y返回长度
popES5-删除最后一位Y删除的元素
unshiftES5-在第一位新增一或多个元素Y返回长度
shiftES5-删除第一位Y删除的元素
reverseES5-反转数组Y返回反转结果
sliceES5-截取指定位置的数组N返回一个从开始到结束(不包括结束)选择的数组的浅拷贝到一个新数组对象
spliceES5-删除指定位置,并替换Y返回删除的数据
sortES5-排序(字符规则)Y返回排序后的结果
toStringES5-直接转为字符串,并返回N返回转换字符串
valueOfES5-返回数组对象的原始值N返回数组对象的原始值
indexOfES5查询并返回数据的索引N查询并返回数据的索引
lastIndexOfES5反向查询并返回数据的索引N反向查询并返回数据的索引
forEachES5参数为回调函数,会遍历数组所有的项,回调函数接受三个参数,分别为value,index,self;forEach没有返回值N
mapES5forEach,同时回调函数返回数据,组成新数组由map返回N组成新数组由map返回
filterES5forEach,同时回调函数返回布尔值,为true的数据组成新数组由filter返回N返回新数组
everyES5forEach,同时回调函数返回布尔值,全部为true,由every返回trueN返回Boolen
someES5forEach,同时回调函数返回布尔值,只要由一个为true,由some返回trueN返回Boolen
reduceES5归并,同forEach,迭代数组的所有项,并构建一个最终值,由reduce返回N返回归并值`
reduceRightES5反向归并,同forEach,迭代数组的所有项,并构建一个最终值,由reduceRight返回N返回归并值`
includesES7查找数组是否包含某个元素N返回Boolen
findES6用于找出第一个符合条件的数组成员N返回该成员,如果没有符合条件的成员,则返回undefined
findIndexES6用于找出第一个符合条件的数组成员N返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
keysES6用于遍历数组N返回一个遍历器对象,可以用for...of循环进行遍历,对键名的遍历
valuesES6用于遍历数组N返回一个遍历器对象,可以用for...of循环进行遍历,对键值的遍历
entriesES6用于遍历数组N返回一个遍历器对象,可以用for...of循环进行遍历,对键值对的遍历

注意: object对象keys(), values(), entries()

1. Object.keys()

ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名, 返回值: 数组

let obj = { a: 1, b: 2, c: 3 };

for (let key of Object.keys(obj)) {
    console.log(key); // 'a', 'b', 'c'
}
var obj1 = {'name': 'lucas', 'age': 22};
console.log(Object.keys(obj1)) // ['name', 'age']

2. Object.values()

ES2017 引入了跟Object.keys配套的Object.valuesObject.entries,作为遍历一个对象的补充手段,供for...of循环使用, 因为其他遍历方法比如for in只能通过obj[key]的方式拿到对象的键值,ES7可通过 Object.values(obj) 拿到对象的键值

let obj = { a: 1, b: 2, c: 3 };
for (let value of Object.values(obj)) {
    console.log(value); // 1, 2, 3
}

var obj1 = {'name': 'lucas',age: 22};
console.log(Object.values(obj1)) // ['lucas', 22]

3. Object.entries()

Object.entries()Object.keys 相关,不过 entries()函数会将 keyvalue 以数组的形式都返回。这样,使用循环或则将对象转为 Map 就很方便了

let obj = { a: 1, b: 2, c: 3 };
for (let [key, value] of Object.entries(obj)) {
	console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
}

var obj1 = {"name":"lucas",age:22};
console.log(Object.entries(obj1)) // ['name', 'lucas'] ['age', 22]

Object.entriesArray reduce混用 十进制数字转罗马数字

/**
 * @param {number} num
 * @return {string}
 */
var intToRoman = function(num) {
    // 定义出罗马对应数字
    const map = {
        M: 1000,
        CM: 900,
        D: 500,
        CD: 400,
        C: 100,
        XC: 90,
        L: 50,
        XL: 40,
        X: 10,
        IX: 9,
        V: 5,
        IV: 4,
        I: 1
    };
    // 利用js Object.entries(map) 转换成: [['M', 1000], ['CM': 900]] 这样格式
    // 这是一个知识点
    // 再利用数组reduce方法累加
    return Object.entries(map).reduce((resut, [letter, n]) => {
        // letter.repeat 字符循环几次
        resut += letter.repeat(Math.floor(num / n));
        num %= n;
        return resut;
    }, '');
};