zoukankan      html  css  js  c++  java
  • 工作中对象数组常见的一些操作

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

    数组拷贝

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

  • 相关阅读:
    bzoj3505 数三角形 组合计数
    cogs2057 殉国 扩展欧几里得
    cogs333 荒岛野人 扩展欧几里得
    bzoj1123 BLO tarjan求点双连通分量
    poj3352 road construction tarjan求双连通分量
    cogs1804 联合权值 dp
    cogs2478 简单的最近公共祖先 树形dp
    cogs1493 递推关系 矩阵
    cogs2557 天天爱跑步 LCA
    hdu4738 Caocao's Bridge Tarjan求割边
  • 原文地址:https://www.cnblogs.com/Upton/p/6441692.html
Copyright © 2011-2022 走看看