js 改变/不改变原数组的方法汇总

298 阅读1分钟

改变原数组的

splice()

splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。

语法

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

demo

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months); // ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months); // ["Jan", "Feb", "March", "April", "May"]

sort()

sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的(按位比较)

语法

arr.sort([compareFunction])

demo

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months); // ["Dec", "Feb", "Jan", "March"]

// 按位比较
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1); // [1, 100000, 21, 30, 4]

// 比较函数接受两个参数,如果第一个参数应该排在第二个参数前面,就返回负值;如果两个参数相等,则返回0;如果第一个参数应该排在第二个参数后面,就返回正值,如·:
function compare(v1, v2) {
    if(v1 < v2) {
        return -1;
    } else if(v1 > v2) {
        return 1;
    } else {
        return 0;
    }
}
array1.sort(compare);
console.log(array1); // [1, 4, 21, 30, 100000]

// 降序:只需将上面的 return -1 和 return 1 调换一下位置即可

// 此外,这个比较函数还可以简写为一个箭头函数
array1.sort((a, b) => a < b ? 1 : a > b ? -1 : 0)
console.log(array1); // [1, 4, 21, 30, 100000]

// 如果数组的元素是数值,或者其valueOf()方法返回值的对象(如: Date 对象),这个比较函数还可以写得更简单,因为这时可以直接用第二个值减去第一个值
function compare(v1, v2){
    return v2 - v1;
}