Array和String
Posted wslxs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Array和String相关的知识,希望对你有一定的参考价值。
Array对象
new Array()
var arr = new Array(2);//创建长度为2的空数组
检测参数是否是数组
创建数组
var arr =new Array(5);
检测参数是否是数组 instanceof/Array.isArray(params)
/**
*
- @param []] params
- @returns
*/
function reverse(params)
if(params instanceof Array)//或者Array.isArray(params)
var arr = [];
for (var i = 0; i < params.length; i++)
arr[arr.length] = params[params.length - i-1];
return arr;
else
return \'这个参数不是数组格式\';
var arr = [1,2,3,4,5,6];
var arr= reverse(arr);
console.log(arr);
判断arr是否是数组
console.log(Array.isArray(arr));//true
添加删除数组的方法
var arr1 = [1,2,3];
//push可以给数组末尾追加新的元素
//push()参数直接写数组元素就可以
//push完毕后返回新数组的长度
var a = arr1.push(4,\'pink\');//增加了2个元素
console.log(arr1);
console.log(a);//就等于arr.length
// unshift 给数组前面添加元素,返回数组长度
console.log(arr1.unshift(18));
//pop 删除数组最后一个元素,返回值 被删除的元素
console.log(arr1.pop());
//pop 删除数组第一个元素,返回值 被删除的元素
console.log(arr1.shift());
翻转数组 reverse
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
arr.reverse();
console.log(arr);
排序 sort();
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
arr.sort(function(a,b)
return a-b;//升序
);
arr.sort(function(a,b)
return b-a;//降序
);
console.log(arr);
数组索引 indexof() lastIndexof()
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
console.log(arr.indexOf(7));//返回9 第一个满足条件的索引号
console.log(arr.indexOf(100));//返回-1 如果没有找到元素返回-1
console.log(arr.lastIndexOf(7));//返回9 从后往前找第一个满足条件的索引号
案例:将数组[2,0,6,1,77,0,52,0,25,7]中的0去掉,形成一个不包含0的数组
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var arr1 = [];
for (var i = 0; i < arr.length; i++)
if (arr[i] != 0)
arr1.push(arr[i]);
console.log(arr1);
案例 数组去重
/**
*
- @param String[] arr[]
- @returns newarr
*/
var remove = (arr)=>
var newarr = [];
for(let i =0;i<arr.length;i++)
if(newarr.indexOf(arr[i])==-1)
newarr.push(arr[i]);
return newarr;
var arr=[\'c\',\'a\',\'z\',\'a\',\'z\',\'a\',\'z\',\'c\'];
console.log(remove(arr));
数组转为字符串 toString() join()可增加分隔符
var arr=[\'c\',\'a\',\'z\',\'a\',\'z\',\'a\',\'z\',\'c\'];
console.log(arr.toString());//c,a,z,a,z,a,z,c
console.log(arr.join());//c,a,z,a,z,a,z,c
console.log(arr.join(\'-\'));//c-a-z-a-z-a-z-c
console.log(arr.join(\'
JavaScript:String 和 Array 上 indexOf 方法的效率差异
【中文标题】JavaScript:String 和 Array 上 indexOf 方法的效率差异【英文标题】:JavaScript: difference in efficiency of indexOf method on String and Array 【发布时间】:2016-01-08 02:00:54 【问题描述】:我很好奇 JavaScript 中 Array
和 String
都可用的 indexOf
方法的效率是否存在差异。我认为 indexOf
在 String 上的效率低于在 Array 上的效率,我的 new 测试结果支持这一点。例如:
var arr = ['abc', 'ab', 'abz', '1'];
var str = 'abcababz1';
var needle = 'abxx';
//concatenate to make them bigger
for (var i = 0; i < 30; i++)
arr = arr.concat(arr);
str = str.concat(str);
arr.push(needle); //append needle last
str = str.concat(needle);
然后我使用了开始和结束时间戳
arr.indexOf(needle); // faster!
str.indexOf(needle);
我在node中做了这个测试,新的测试结果显示:
time used on Array is: 35
time used on String is: 57
因此,对于 indexOf,Array 比 String 更有效。这个新的测试基本上创造了最坏的情况——在字符串或数组的最后一个针。
编辑:
如果indexOf
在数组上更有效,我想知道我们是否应该先将字符串(例如用逗号分隔)拆分为数组,然后再使用indexOf
方法搜索子字符串。
对于这个字符串:
var str2 = "hello,world,country,continent,ocean"
如果你搜索ocean
,你会先把字符串str2
拆分成一个数组,然后用indexOf
找到ocean
吗?
var arr2 = str2.split(",");
arr2.indexOf('ocean');
【问题讨论】:
我不知道你的假设是什么或为什么。就此而言,我什至不知道你在问什么。 我对这个有点斜视。这些操作做了两个不同的事情。这就像问使用十字头螺丝刀拧松螺丝或使用夜行器抓大眼虫是否更有效。差异很重要的最终目标或场景是什么? 数组的一个好处是它可以通过首先比较字符串长度来避免实际的逐字符比较。如果长度匹配,它只会进行字符比较。现在您似乎想知道是否应该先拆分,但这也会产生相当多的开销。与许多关于性能的问题一样,这完全取决于具体情况。 是的,这两个方法的名称是相同的,然后呢?数组和字符串是完全不同的数据结构,它们的indexOf
方法的算法和实现也是如此。它不是应用于两个数据结构的单个函数,它们是两个非常不同的函数。那么,这个问题的意义何在?
【参考方案1】:
我根据您的编辑猜测您想使用 indexOf 来检查列表中是否存在以字符串开头的给定元素。
然后这两个选项是在字符串本身上使用 indexOf 或首先将其解析为数组并查看元素是否存在于那里,因为您知道格式是“item1,item2”。
http://jsperf.com/indexof-array-vs-string-efficiency
基于该 jsperf,我们可以看到,尽管 indexOf 在数组本身上更快,但将字符串转换为数组也是有代价的,最好对原始字符串执行 indexOf。
*请注意,如果您有像 blueocean 这样的元素,则字符串 indexOf 需要进行一些额外的修改,以确保 indexOf("ocean") 不会返回 true,并且可能需要 indexOf(",ocean,")
【讨论】:
有趣的比较!我添加了另一个使用正则表达式的测试:jsperf.com/indexof-array-vs-string-efficiency/2以上是关于Array和String的主要内容,如果未能解决你的问题,请参考以下文章
Java Collections - Array 和 String 常用函数
Java Collections - Array 和 String 常用函数