js如何将一个数组对象转换成另外一种格式的数组对象

JavaScript025

js如何将一个数组对象转换成另外一种格式的数组对象,第1张

var arr = ["中国|广东|深圳","中国|广东|深圳","中国|湖北|黄石","中国|湖北|武汉","中国|广东|广州","中国|广东|广州","中国|湖北|武汉","中国|福建|福州","中国|福建|厦门"]

        var result={}

        var temp={}

        for(var i=0i<arr.lengthi++){

            var item=arr[i]

            var its=item.split('|')//按|拆分

            var country=its[0]//国家

            var province=its[1]//省

            var city=its[2]//城市

            if(!result[country]){//国家不在结果对象里

                result[country]=[]//添加

            }

            if(!temp[province]){//临时对象没有省信息

                result[country].push(temp[province]={//记入结果数组

                    province:[province],

                    city:[],

                    count:[]

                })

            }

            var info=temp[province]

            var found=false

            for(var j=info.city.length-1j>=0j--){//在省信息的城市数组里查找是否已经存在

                if(info.city[j]==city){

                    found=true//已经存在

                    info.count[j]=info.count[j]+1//更新count

                }

            }

            if(!found){//未找到城市

                info.city.push(city)//添加

                info.count.push(1)//count初始值为1

            }

        }

        console.log(result)

•object 类型:

◦ 创建方式:

/*new 操作符后面Object构造函数*/ var person = new Object()person.name = "lpove"person.age = 21/*或者用对象字面量的方法*/ var person = { name: "lpove"age : 21}

•array类型

◦ 创建方式:

`var colors = new Array(“red”,”blue”,”yellow”)

• 区别和不解

◦ 比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?

我后来才知道,数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。

当然,数组和对象的另一个区别是,数组的数据没有”名称”(name),对象的数据有”名称”(name)。

但是问题是,很多编程语言中,都有一种叫做”关联数组”(associative array)的东西。这种数组中的数据是有名称的。

• 但是在《javascript DOM》中,不推荐我们使用 关联数组;

◦ 关联数组:

var lpove = Array()lpove[name] = "lei"lpove[age] = 21lpove[living] = true/*对象构造*/ var lpove = Object()lpove.name = "lei"lpove.age = 21lpove.living = true

因为在本质上你创建的关联数组的性质就是Array对象的属性