我有这些猫品种
cats = [
'Abyssinian',
'Balinese',
'Bombay',
'Birman'];
现在编写的代码通常是这样的
for(var i in cats)
{
... do
}
现在我必须在javascript中修改相同的功能。我只能修改以查看i
是Balinese
还是Bombay
中的任何一个..然后执行这些
我在想
for(var i in cats)
{
if(i == 'Balinese' || i == 'Bombay'){
... do
}
}
相反,我希望i
包含Balinese,Bombay
而不是在中间写|
子句?
for(var i in cats)
{
if(i.contains('Balinese', 'Bombay'){ //this would be better, suggestions?
... do
}
}
如何?
答案 0 :(得分:1)
试用此代码,
这会在不受支持的浏览器中添加.indexOf()
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
在Array原型中添加contains方法
Array.prototype.contains = function(){
for(var i=0,len=arguments.length;i<len;i++){
if(this.indexOf(arguments[i]) !== -1){
return true;
}
}
return false;
}
现在,您可以这样使用,
var cats = [
'Abyssinian',
'Balinese',
'Bombay',
'Birman'];
if(cats.contains('Balinese')){
console.log('Balinese');
}
if(cats.contains('Balinese','Bombay')){
console.log('Balinese,Bombay');
}
if(cats.contains('lines','Bombay')){
console.log('lines,Bombay');
}
if(cats.contains('lines','mbay')){
console.log('lines,mbay');
}
如果您正在使用jQuery,则可以使此代码更简单:)
答案 1 :(得分:0)
尝试嵌套循环?
var cats = ["Abyssinian", "Balinese", "Bombay", "Birman"];
var thisAndThat = ["Abyssinian", "Apple", "Siberian", "Windows", "StackOverflow"];
for(var i in cats) {
for(var x in thisAndThat) {
if(cats[i] == thisAndThat[x]){
... do
}
}
}
使用jQuery
$.each(thisAndThat, function(key, value){
if( $.inArray(value, cats) > -1 ){
alert(value+" is inside the cats array.");
}
});
答案 2 :(得分:0)
检查此代码,
var cats=['Abyssinian', 'Balinese', 'Bombay', 'Birman'];
Array.prototype.contains=function(incattype){
for(var i=0; i<cats.length;i++){
if(cats[i]==incattype) {
return true;
} else{
return false;
}
}
};
var catslist=['Abyssinian', 'Balinese', 'Bombay11' ];
for(var i=0; i<catslist.length;i++){
document.write(cats.contains(catslist[i]));
}
链路; -
答案 3 :(得分:0)
首先,重要的是要意识到如果您使用for...in
遍历javascript数组,则必须使用hasOwnProperty
方法:
for(var i in cats){
if(cats.hasOwnProperty(i))
console.log(cats[i]);
}
你真的应该这样使用for(;;)
:
for(var i=0;i<cats.length;i++){
console.log(cats[i]);
}
除此之外,你正在寻找Array.indexOf
,它得到了现代浏览器的支持,但在旧版浏览器中的支持可能较少 - 这就是为什么大多数框架(jQuery,Moo,原型等)都定义了自己的变体此方法(有关详细信息,请参阅this question's answers)。
var cats = ["Abyssinian","Balinese","Bombay","Birman"];
var test = ["Abyssinian","Balinese"];
for(var i in cats){
if(cats.hasOwnProperty(i) && test.indexOf(cats[i]) != -1)
console.log(cats[i]);
}
答案 4 :(得分:0)
不建议使用for-in循环,因为它们比for,while或do-while慢七倍。而不是for-in,你也可以使用for-each,它不像for或while那样快,但更像是for-in循环。
将它与正则表达式结合起来,我的方法是:
var cats = [
'Abyssinian',
'Balinese',
'Bombay',
'Birman'
];
cats.forEach(function(cat, index){
if(cat.match(/Abyssinian|Birman/)){
// Do what you want
}
});