美文网首页
工作中对象数组常见的一些操作

工作中对象数组常见的一些操作

作者: Stevenzwzhai | 来源:发表于2017-02-25 14:02 被阅读18次

    在很多时候,我们获取一个列表的时候,后端返回的列表都是对象数组,如果单纯的展示,那很简单,但往往回去做一些二次加工,比如选择商品,并对其数量或者价格做修改,而且还会重新选择,但是之前选好的已经修改了一些属性,我们就需要将两次选择的数据进行合并。等等。。

    数组拷贝

    首先讲一下数组拷贝问题,这里不细说怎么拷贝,而是提醒大家,在对数组进行传递并修改时一定要对数组拷贝,不然会发生意想不到的错误(在另一个地方修改了数组,之前的也变化了)。大家都知道数组是属于引用类型变量,所以传递的时候传递的是引用地址。记得拷贝,记得拷贝,一定要记得拷贝!(我一般使用slice来处理)

    对数组添加额外属性

        function addKey(list, keyword, value){
        if(Object.prototype.toString.call(list) !== "[object Array]"){
                return [];
        }
        var list = list.slice();
        if(list.length == 0){
            return [];
        }
        var newList = list.map(function(item, index){
            if(typeof item[keyword] == "undefined"){
                item[keyword] = value || "";
            }
            return item;
        })
        return newList || [];
    }
    

    合并数组

    function merge(oldList, newList, keyword){
        if(Object.prototype.toString.call(oldList) !== "[object Array]" || Object.prototype.toString.call(newList) !== "[object Array]"){
            return;
        }
        //在这里为了方便做新旧数组对比,我们先做了一些处理,以关键字和商品信息为键值对来保存两组数据
        var oldJson = formatArr(oldList.slice(), keyword);
        var newJson = formatArr(newList.slice(), keyword);
        var newArr = [];
        for(var key in newJson){
            if(typeof oldJson[key] !== "undefined"){
                newArr.push(oldJson[key]);
            }else{
                newArr.push(newJson[key]);
            }
        }
    
        return newArr;
    }
    
    function formatArr(list, keyword){
        if(Object.prototype.toString.call(list) !== "[object Array]"){
            return;
        }
        var list = list.slice();
        var newJson = {};
        list.forEach(function(item, index){
            newJson[item[keyword]] = item;
        })
        return newJson;
    }
    

    github上有详细注释如何使用https://github.com/Stevenzwzhai/plugs/tree/master/Array-Deal

    相关文章

      网友评论

          本文标题:工作中对象数组常见的一些操作

          本文链接:https://www.haomeiwen.com/subject/ugggwttx.html