关于javascript 2的n次方比较n个段落里的字是否相同

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
23&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&index&=&str.indexOf('icodein');&//&输出21&&&&var&index2&=&str.indexOf('icodein',&index+1);&//&输出-1,因为从下标为22的字符开始,没有可匹配的字符串,所以返回-1。第二种:使用lastIndexOf方法& & lastIndexOf方法,也是String的一个方法,从方法名可以看出,这是从字符串的后面开始查找,如果有指定的字符串,会返回当前的索引,否则返回-1,包含两个参数:searchvalue,fromindex& & 第一个参数表示,要查找的字符串(注意,这里只能是字符串啂,不可以是正则表达式的),& & 第二个参数表示,从后面数第几个索引开始查找,这个参数是可选的。& &&example:123&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&index&=&str.lastIndexOf('icodein');&//&输出21&&&&var&index2&=&str.lastIndexOf('icodein',&index-1);&//&输出-1,因为从下表20往前,没有指定的字符串第三种:使用match方法& & match方法,也是String的一个方法,从方法名看唉,就是专门用来匹配东西的,包括一个参数,searchvalue, 这个方法值得一说,因为它是可以使用正则表达式来做参数的,看demo:& &&example:123&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&index&=&str.match("icodein");&//&输出:["icodein",&index:&21,&input:&"I&am&a&coder,&I&love&icodein&website!"]&&&&&var&index2&=&str.match(/icodein/);&//&输出:&["icodein",&index:&21,&input:&"I&am&a&coder,&I&love&icodein&website!"]& & // 在正则表达式中,没有使用全局搜索g模式的话,match方法会返回第一个匹配到的字符串信息(包括匹配字符串,索引,还有被查询字符串)。& & // 如果使用了全局匹配呢,将会返回一个数组,数组中存放的是匹配的字符串集合,看例子(这个时候就不会包含有上面中的index, input属性)。& &var index3 = str.match(/a/g); // 输出:["a", "a"]&& & 附:match方法会被经常用来,要从一个字符串中,模糊匹配出相应的具体字符串数据,例如用/s*dads*/g这个正则表达式匹配“1a1 1aa 2b1 3a3”,就会得到["1a1 ", " 3a3"] ,是的,在这个情况下,还是比较有用的,有点类似于正则表达式对象用的exec方法,可以返回具体的匹配字符串。(下文中会简单的讲一下)第四种: 使用search方法& & search方法,也是String的一个方法,用来查询某一字符串在指定字符串的位置,有一个参数,searchvalue, 这个参数也可以是正则表达式哟,这个方法比较单一,因为它只能返回第一次匹配到的索引,如果没有匹配值的话,返回-1。(可以把它看作一个简洁版的indexOf,但是indexOf是不支持正则的,这里一定要区分清楚)。& &&example:123&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&index&=&str.search('a');&//&输出2&&&&var&index&=&str.search(/a/g);&//&输出2,无论当前正则是全局匹配模式,仍然会将第一个匹配的索引给返回。第五种: 使用test方法& & test方法,是RegExg实例的一个方法,用来检测,当前的正则表达式,是否被一个字符串所匹配,有一个参数,searchvalue,参数是字符串。& &&example:123&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&pattern&=&/icodein/;&&&&var&result&=&pattern.test(str);&//&输出true第六种: 使用exec方法& & exec方法,是RegExp实例的一个方法,它test所拥有的检测功能意外呢,还可以将匹配到的字符串给返回,这里跟match方法倒是有点一致。也有一个参数,searchvalue,参数是字符串。& &&example:& &123&&&&var&str&=&"I&am&a&coder,&I&love&icodein&website!";&&&&var&pattern&=&/icodein/;&&&&var&result&=&pattern.exec(str);&//&输出:["icodein",&index:&21,&input:&"I&am&a&coder,&I&love&icodein&website!"]& & exec其实是相对复杂话的检测方法,它还有一个lastIndex属性,用来存放最后一次匹配字符串的索引。& & 当 pattern是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。转载自网络
阅读(2355)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'javascript中查询指定字符串的几种方法',
blogAbstract:'无论是在大型项目中,还是平时写的小型demo中,大家可能有意无意的都会设计到字符串的操作。下面总结了几种从给定字符串中查询指定字符串的几种方式:&&&&1.使用indexOf方法&&&&&&&&2.使用lastIndexOf方法',
blogTag:'javascripts',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}JS判断一个数组中是否有重复值的三种方法_百度知道
JS判断一个数组中是否有重复值的三种方法
我有更好的答案
方法一无需思考,我们可以得到 O(n^2) 复杂度的解法。定义一个变量数组 res 保存结果,遍历需要去重的数组,如果该元素已经存在在 res 中了,则说明是重复的元素,如果没有,则放入 res 中。function unique(a) {
var res = [];
for (var i = 0, len = a. i & i++) {
var item = a[i];
for (var j = 0, jLen = res. j & jL j++) {
if (res[j] === item)
if (j === jLen)
res.push(item);
} } var a = [1, 1, '1', '2', 1];var ans = unique(a);console.log(ans); // =& [1, &1&, &2&]代码非常简单,那么是否能更简洁些?如果不考虑浏览器兼容,我们可以用 ES5 提供的 Array.prototype.indexOf 方法来简化代码。function unique(a) {
var res = [];
for (var i = 0, len = a. i & i++) {
var item = a[i];
(res.indexOf(item) === -1) && res.push(item);
} } var a = [1, 1, '1', '2', 1];var ans = unique(a);console.log(ans); // =& [1, &1&, &2&]既然用了 indexOf,那么不妨再加上 filter。function unique(a) {
var res = a.filter(function(item, index, array) {
return array.indexOf(item) ===
}var a = [1, 1, '1', '2', 1];var ans = unique(a);console.log(ans); // =& [1, &1&, &2&]方法二法一是将原数组中的元素和结果数组中的元素一一比较,我们可以换个思路,将原数组中重复元素的最后一个元素放入结果数组中。function unique(a) {
var res = [];
for (var i = 0, len = a. i & i++) {
for (var j = i + 1; j & j++) {
// 这一步十分巧妙
// 如果发现相同元素
// 则 i 自增进入下一个循环比较
if (a[i] === a[j])
res.push(a[i]);
} }var a = [1, 1, '1', '2', 1];var ans = unique(a);console.log(ans); // =& [&1&, &2&, 1]虽然复杂度还是 O(n^2),但是可以看到结果不同,1 出现在了数组最后面,因为结果数组取的是元素最后一次出现的位置。方法三(sort)如果笔试面试时只答出了上面这样 O(n^2) 的方案,可能还不能使面试官满意,下面就来说几种进阶方案。将数组用 sort 排序后,理论上相同的元素会被放在相邻的位置,那么比较前后位置的元素就可以了。function unique(a) {
return a.concat().sort().filter(function(item, pos, ary) {
return !pos || item != ary[pos - 1];
});}var a = [1, 1, 3, 2, 1, 2, 4];var ans = unique(a);console.log(ans); // =& [1, 2, 3, 4]但是问题又来了,1 和 &1& 会被排在一起,不同的 Object 会被排在一起,因为它们 toString() 的结果相同,所以会出现这样的错误:var a = [1, 1, 3, 2, 1, 2, 4, '1'];var ans = unique(a);console.log(ans); // =& [1, 2, 3, 4]当然你完全可以针对数组中可能出现的不同类型,来写这个比较函数。不过这似乎有点麻烦。方法四 (object)用 JavaScript 中的 Object 对象来当做哈希表,这也是几年前笔试时的解法,跟 sort 一样,可以去重完全由 Number 基本类型组成的数组。function unique(a) {
var seen = {};
return a.filter(function(item) {
return seen.hasOwnProperty(item) ? false : (seen[item] = true);
});}var a = [1, 1, 3, 2, 1, 2, 4];var ans = unique(a);console.log(ans); // =& [1, 3, 2, 4]还是和方法三一样的问题,因为 Object 的 key 值都是 String 类型,所以对于 1 和 &1& 无法分别,我们可以稍微改进下,将类型也存入 key 中。function unique(a) {
var ret = [];
var hash = {};
for (var i = 0, len = a. i & i++) {
var item = a[i];
var key = typeof(item) +
if (hash[key] !== 1) {
ret.push(item);
hash[key] = 1;
} }var a = [1, 1, 3, 2, '4', 1, 2, 4, '1'];var ans = unique(a);console.log(ans); // =& [1, 3, 2, &4&, 4, &1&]虽然解决了讨厌的 1 和 &1& 的问题,但是还有别的问题!var a = [{name: &hanzichi&}, {age: 30}, new String(1), new Number(1)];var ans = unique(a);console.log(ans); // =& [Object, String]但是如果数组元素全部是基础类型的 Number 值,键值对法应该是最高效的!方法五 (ES6)ES6 部署了 Set 以及 Array.from 方法,太强大了!如果浏览器支持,完全可以这样:function unique(a) {
return Array.from(new Set(a));} var a = [{name: &hanzichi&}, {age: 30}, new String(1), new Number(1)];var ans = unique(a);console.log(ans); // =& [Object, Object, String, Number]_.unique最后来看看 underscore 对此的实现方式,underscore 将此封装到了 _.unique 方法中,调用方式为 _.unique(array, [isSorted], [iteratee])。其中第一个参数是必须的,是需要去重的数组,第二个参数可选,如果数组有序,则可以传入布尔值 true,第三个参数可选,如果需要对数组迭代的结果去重,则可以传入一个迭代函数。而数组元素去重是基于 === 运算符的。其实很简单,underscore 中的实现方式和上面的方法一相似。我们来看它的核心代码:for (var i = 0, length = getLength(array); i++) {
var value = array[i],
// 如果指定了迭代函数
// 则对数组每一个元素进行迭代
computed = iteratee ? iteratee(value, i, array) :
// 如果是有序数组,则当前元素只需跟上一个元素对比即可
// 用 seen 变量保存上一个元素
if (isSorted) {
// 如果 i === 0,则直接 push
// 否则比较当前元素是否和前一个元素相等
if (!i || seen !== computed) result.push(value);
// seen 保存当前元素,供下一次对比
} else if (iteratee) {
// 如果 seen[] 中没有 computed 这个元素值
if (!_.contains(seen, computed)) {
seen.push(computed);
result.push(value);
} else if (!_.contains(result, value)) {
// 如果不用经过迭代函数计算,也就不用 seen[] 变量了
result.push(value);
}}外面的循环遍历数组元素,对于每个元素,如果数组有序,则和前一个元素比较,如果相同,则已经出现过,不加入到结果数组中,否则则加入。而如果有迭代函数,则计算传入迭代函数后的值,对值去重,调用 .contains 方法,而该方法的核心就是调用 .indexOf 方法,和我们上面说的方法一异曲同工。关于 _.unique 方法的详细代码,可以参考
采纳率:35%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。js中比较两个字符串是否相等_百度知道
js中比较两个字符串是否相等
我有更好的答案
s中字符串比较值用==不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等var str1=&a&;var str2=&b&;var str1=&a&;if(str1 == str2){}s中字符串比较数据类型和值用======如果类型不同,其结果就是不等var str2=&1&;var str2=&b&;var str1=&a&;if(str1 === str2){}
采纳率:36%
js中字符串比较直接用 == 就行啊var str1=&a&;var str2=&b&;if(str1 == str2){}
为您推荐:
其他类似问题
两个字的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。其他回答(4)
遍历一边,然后用类似hash,一样的,记录一下就知道了
收获园豆:5
园豆:9731
如楼上所说,代码如下:
function check(str){
var a = str.split(','),dt={},tmp,i=0,l=a.
for(; i & i++){
tmp = a[i];
if(tmp.length&0){
if(dt[tmp]){
return true;//true代表有重复的
dt[tmp]=1;
return true;//true代表没有重复的
check('sdfsdf,aaa,3sdf,w234,aaa');
收获园豆:10
checkString("aa,bb,cc,dd"); function checkString(str){ var arrStr=str.split(","); var hash = {}; for(var i=0;i&arrStr.length-1;i++){ if(!hash[arrStr[i]]) { hash[arrStr[i]]= } else{ alert("有重复的。"); } } alert("没有重复的!"); }
收获园豆:10
使用正则表达式进行匹配,性能绝对高!
清除回答草稿
&&&您需要以后才能回答,未注册用户请先。海贼.索隆:既然已经决定做一件事,那么除了当初决定做这件事的我之外,没人可以叫我傻瓜!...
JavaScript 判断两个数组是否相等 或者 判断一个数组中是否有重复的元素
//判断两个数组是否相等:
var aArray1 = ["1","I","2","N","3","S"],aArray2 = ["1","I","2","N","3","S"];
if(aArray1.sort().toString() == aArray2.sort().toString()){
alert("相等");
alert("不相等");
判断一个数组中是否有重复的元素:
var aTitleList = ["1","I","2","N","3","S"],bRepeat =
$.each(aTitleList.sort(), function (iIndex, sItem) {
if (iIndex + 1 & aTitleList.length) {
if (aTitleList[iIndex] == aTitleList[iIndex + 1]) {
alert("有重复元素" + sItem);
if(bRepeat){
alert("有重复元素!");
alert("没有重复元素!");
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 javascript字符串比较 的文章

 

随机推荐