1. 前言
首先,当JS对象是键值对的情况时(Json对象),因为数组时以数字为索引的,所以只能把JS对象中的Key或者Value组成数组使用。
2. 样例如下:
var obj={"one":"I am 1","two":"I am 2"}
var arr = Object.getOwnPropertyNames(obj) //arr=["one", "two"]
var arr2 = Object.keys(obj)//arr=["one", "two"]
var valArr = arr.map(function(i){return obj[i]})//["I am 1", "I am 2"]
var valArr2 = arr2.map(function(i){return obj[i]})//["I am 1", "I am 2"]
//或者2,4和3,5各自合并成一条语句
var valArr22 = Object.keys(obj).map(function(i){return obj[i]})//["I am 1", "I am 2"]
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对象的属性