A. javaScript中的数组、集合及效率
数组是JavaScript提供的一个内部对象 它是一个标准的集合 我们可以添加(push) 删除(shift)里面元素 我们还可以通过for循环遍历里面的元素 那么除了数组我们在JavaScript里还可以有别的集合吗?
由于JavaScript的语言特性 我们可以向通用对象动态添加和删除属性 所以Object也可以看成是js的一种特殊的集合 下面比较一下Array和Object的特性:
Array:
新建:var ary = new Array(); 或 var ary = [];
增加:ary push(value);
删除:delete ary[n];
遍历:for ( var i= ; i < ary length ; ++i ) ary;
Object:
新建:var obj = new Object(); 或 var obj = {};
增加:obj[key] = value; (key为string)
删除:delete obj[key];
遍历:for ( var key in obj ) obj[key];
知凳从上面的比较可以看出Object完全可以作为一个集合来使用 在使用Popup窗口创建无限级Web页菜单( )中我介绍过Eric实现的那个__MenuCache__ 它也就是一个模拟的集合对象
如果我们要在Array中检索出一个指定的值 达内培训我们需要遍历整个数组:
var keyword = ;
for ( var i= ; i < ary length ; ++i )
{
if ( ary == keyword )
{
// todo
}
}
而我们在Object中检索一个指定的key的条目 只需要是要使用:
var key = ;
var value = obj[key];
// todo
Object的这个特性可以用来高效的检索Unique的字符串集合 遍历Array的时间复杂度是O(n) 而遍历Object的时间复杂度是O( ) 虽腔猛棚然对于 次集合的for检索代价也就几十ms 可是如果是 * 次检索或更多 使用Object的优势一下就体现出来了 在此之前我做了一个mapping 把 个Unique的字符mapping到 个字符串数组上 耗时 s!后来把for遍历改成了Object模拟的集合的成员引伍则用 同样的数据量mapping 耗时仅 s!!!
lishixin/Article/program/Java/JSP/201311/19256
B. js数组和集合的区别是什么
看语境吧,这里的集合是是dom对象,和html dom树绑定的,html的元素发生变化,这个集合也会变化。数组的意思就是传统的数组的意思
C. js中数组和对象循环遍历
数组:
var arr = [‘a’,‘b’,'c'];
for (let i = 0;i<arr.length;i++){
console.log(i,arr[i])
};
对象:
var person = { name:'tom',age:'29',sex:'男‘};
// 对象如果要用for循环来遍历,需要先有Object.key()的方法来拿到手歼可迭代(遍历)的私有属性名的集合(数组)
var keys = Object.keys(person);
for (let i = 0;i<keys.length;i++){
console.log(keys[i]+":"+person[keys[i]]);
};
数组:
for(let key in arr){
// 值得注意的是,key为数组的索引,如若需要获取属性的值,则需要使用数组加索引下标 的形式来获取
console.log(key,arr[key]);
}
对象:
for(let key in obj){
// 值得注意的是,key为对象的键名,键值要以obj[key]的方式来获取
console.log(key,obj[key]);
}
数组:
for(let value of arr){
//值得注意的是,for...of跟for...in是不一样的,for...in遍历的是数组的索引,for...of遍历的是数组的值
console.log(value);
}
对象:
for...in是不能单独来遍历一个对象的,会报错。
如果对象是一个类数组对象,那用array.from方法转成一个数组就可以用for...of来遍历了。
或者结合Object.keys()方法来使用
for(let key of Object.keys(obj)){
// for...of遍历输出的也是键名
console.log(key,obj[obj]);
}
数组:
forEach()方法遍历数组是没有返回值
值得注意的是数组中有几项,那么传递进去的匿名回调函数拍启就需要执行几次;
arr.forEach((item,index,arr)=>{
console.log(item,index,arr)
)
// 其中item是数组中的当前项,index是数组中的当前下标,arr是原始数组
对象:
原则上forEach是用来遍历数组的,不能遍历对象,但是可以用Object.getOnwPropertyNames()方法来使得对象能被forEach遍历出来。
Object.getOnwPropertyNames()返回一个数组,成员毕贺冲是参数对象自身全部属性的属性名,不管该属性是否能被遍历。
Object.getOnwPropertyNames(obj).forEach((item,index,arr)=>{
console.log(item,index,obj[item])
})
D. javascript中如何获取java中集合或数组。
解决思路抄:
将袭List<String> 转成json,传到界面。js中使用var arr = eval(‘${list}');将list转成js数组。
参考代码如下:
var keyList = eval('${keysList}');
var values = $("#paramsValues").val();
var noSet = [];
for(var i=0;i<keyList.length;i++){
if(values.indexOf(keyList[i])==-1){
noSet.push(keyList[i]);
}
}
E. JS中几种常见的集合
Array数组
set集合(存储的元素是有序不重复的)
Map集合(存储的是键值对的形式)
F. 关于JS里面取得一个数组的集合的问题
大致写了一下:回答
<html>
<head>
<title></title>
</head>
<script src="http://libs..com/jquery/1.9.0/jquery.js"></script>
<script>
var p_gather = new Array();
$(function () {
$("p").each(function () {
p_gather.push($(this).html() == "" ? "空" : $(this).html())
});
alert(p_gather);
})
</script>
<body>
<div>
<p>1</p>
<p>2</p>
<p></p>
<p>3</p>
<p>4</p>
<p>5</p>
</div>
</body>
</html>
G. js里面array是数组还是集合
数组
js没有集合,应该说不叫集合。
js其实只有对象,数组也是一种特殊的对象。
H. js 取数组中某个对象的集合
vararr=data.items;
letnewArr=arr.filter((item,index,arr)=>{
returnitem.id=2//返回一个满足你过滤条件的新数组
});
//newArr就是你想要专的结果属