4

(配列から整数まで) 変化するデータ型を同じ関数に渡し、その値を変更する前にデータ型をチェックするには、instanceof Array を使用して以下のメソッドを見て、より良い/より効率的な方法はありますか?

function foo(x) { 
  if (x instanceof Array) {
    for(i=0;i<x.length;i++){    
      x[i].bar = '1';
      x[i].baz = '2';       
    }   
  }
  else{
    x.bar = '1';
    x.baz = '2';    
  }
}

ありがとう :)

4

2 に答える 2

2

代替 (ECMAScript 標準を使用)

if( Object.prototype.toString.call( x ) === '[object Array]' ) {

    for(i=0;i<x.length;i++) {  

      x[i].bar = '1';
      x[i].baz = '2';       
    }  
}

ECMAScript を参照

または、常に配列として使用したいが、これはお勧めしません

x = [].concat( x );
于 2013-06-16T17:30:56.940 に答える
1

より効率的な方法は、関数を分割することもできます (それが可能な場合):

function fooArray(x) { 
    for(i = 0; i < x.length; i++){    
        foo(x[i]);   
    }   
}

function foo(x) {
    x.bar = '1';
    x.baz = '2'; 
}

x.bar = '1';これは、同じロジック (つまり) を 2 回コーディングする必要がないため、DRY の原則 (「繰り返さない」) にも適用されます。

于 2013-06-16T17:59:14.440 に答える