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

  • 相关阅读:
    一点技巧
    题解G
    WA七次,疯了》》》》》OTZ
    就是过不了啊无奈。。。。。水题都过不了…………OTZ OTZ OTZ
    [IOS]使用UIScrollView和UIPageControl显示半透明帮助蒙板
    [System]几种同步方式
    [Objective C] Singleton类的一个模版
    [IOS] 自定义AlertView实现模态对话框
    [IOS] UIKit Animation
    [IOS]使用genstrings和NSLocalizedString实现App文本的本地化
  • 原文地址:https://www.cnblogs.com/Upton/p/6441692.html
Copyright © 2011-2022 走看看