Array知识整理

2018-06-04  本文已影响0人  ZombieBrandg

Array基本常用API

var arr = [1, 2, 3, 'ab']
var _push = arr.push(4, 5, 6) //length=7 
console.log(arr) //[ 1, 2, 3, 'ab', 4, 5, 6 ]
var _pop = arr.pop() //6
console.log(arr) //[ 1, 2, 3, 'ab', 4, 5 ]
var _shift = arr.shift() //1
console.log(arr) //[ 2, 3, 'ab', 4, 5 ]
var _unshift = arr.unshift('x') //length=6
console.log(arr) //[ 'x', 2, 3, 'ab', 4, 5 ]
var _join = arr.join('/') //x/2/3/ab/4/5 typeof _join = string
console.log(arr) //[ 'x', 2, 3, 'ab', 4, 5 ] 不改变原数组
var _slice = arr.slice(1, 2) //[2]
console.log(arr) //[ 'x', 2, 3, 'ab', 4, 5 ]
var _splice = arr.splice(3, 1, 'hello') //[ 'ab' ] 如果只有一个数组将会拆分原数组 splice(3)===['ab',4,5]
console.log(arr) //[ 'x', 2, 3, 'hello', 4, 5 ]
var _sort = arr.sort() //[ 2, 3, 4, 5, 'hello', 'x' ] 改变原数组
console.log(arr) //[ 2, 3, 4, 5, 'hello', 'x' ] 
var _reverse = arr.reverse() //[ 'x', 'hello', 5, 4, 3, 2 ]
console.log(arr) //[ 'x', 'hello', 5, 4, 3, 2 ]
var _concat = arr.concat([7, 8, 9]) //[ 'x', 'hello', 5, 4, 3, 2, 7, 8, 9 ] 不改变原数组
console.log(arr) //[ 'x', 'hello', 5, 4, 3, 2 ] 这个方法会深拷贝数组

对类数组对象进行数组操作


var string = 'hello'
var a = Array.prototype.join.call(string,'-')
console.log(a) //h-e-l-l-o
var b = Array.prototype.slice.call({0:'a',1:'b',length:2}) //类数组转化数组
console.log(b) //[ 'a', 'b' ]
var person = [{name:'che',age:22 }]

Array深拷贝.concat([])

是利用拼接两个数组的方法去对数组进行深拷贝

var arr3 =[{age:1,name:'che'},{age:2,name:'cz'}]

var arr4 = arr3.concat([])

console.log(arr4)

[ { age: 1, name: 'che' }, { age: 2, name: 'cz' } ]

JSON深拷贝方法

var obj = {name:'ch',age:2}
var newObj = JSON.parse(JSON.stringify(arr5))
console.log(obj === newObj) //false

函数递归深拷贝方法

var obj = {name:'cheche',age:12,like:[1,2,{name:'xiaopei',age:20}]}
function deepCopy(obj){
    var obj2 = Array.isArray(obj)?[]:{};
    if(typeof obj === 'object'){
        for(var key in obj){
            if(typeof obj[key] === 'object'){
                obj2[key] = deepCopy(obj[key])
            }else{
                obj2[key] = obj[key]
            }
        }
    }
    return obj2
}
var x = deepCopy(obj)
x.like[2].name = 'zhangteng'
console.log(obj)        //name: 'xiaopei'
console.log(x)          //name:'zhangteng'
console.log(x === obj)  //false 

浅拷贝

浅拷贝无法使得对象里引用数据类型不相干

var obj = {name:'ccxzc',age:20,c:function(){}}
function shallowCopy(obj){
    var newObj ={}
    for(var key in obj){
        if(obj.hasOwnProperty(key)){
            newObj[key] = obj[key]
        }
    }
    return newObj
}
var sc = shallowCopy(obj)
console.log(sc) //{ name: 'ccxzc', age: 20, c: [Function: c] }
console.log(sc === obj) //false

reduce方法造轮子

var arr = [3, 4, 5, 6];
function reduce(arr, fn, initValue) {
  // var arr2 = arr.concat([])  //利用拼接原理
  // if(initValue !== undefined){
  //     arr2.unshift(initValue)
  // }
  var arr2 = (initValue !== undefined ? [] : [initValue]);
  while (arr2.length > 1) {
    console.log(arr2);
    arr2.splice(0, 2, fn(arr2[0], arr2[1]));
  }
  return arr2[0];
}
var result = reduce(
  arr,
  function(v1, v2) {
    return v1 + v2;
  },
  10
);
console.log(result);

将数组平面化

var arr = [1,2,3,[4,5,6],'dsa',[1,[4,5,[4,1]]]]
function flat(arr){
    var newArr = []
    arr.forEach((element,index) => {
       if(Array.isArray(element)){
        newArr = newArr.concat(flat(element))
       }else{
           newArr.push(element)
       }
    });
    return newArr
}
console.log(flat(arr))

实现一个reduce函数

function reduce(arr, sum, initValue) { 

var sumArr = (initValue === undefined ? [] : [initValue]).concat(arr); 

console.log(sumArr) 

while (sumArr.length > 1) { 

sumArr.splice(0, 2, sum(sumArr[0], sumArr[1])) 

console.log(sumArr) 

} 

return sumArr[0]; 

} 

var x = reduce([1, 2, 3, 4],function(numberA, numberB) { 

return numberA + numberB; 

},10); 

console.log(x); 

实现 flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];

function flatten(arr){ 

var newArr = [] 

arr.forEach(function(e,index){ 

if(typeof e === 'number'){ 

newArr.push(e) 

}else if(Array.isArray(e)){ 

newArr = newArr.concat(flatten(e)) 

} 

}) 

return newArr 

} 

var x = flatten([1, [2], [3, [[4]]]]) 

console.log(x) 

上一篇 下一篇

猜你喜欢

热点阅读