2011-07-06 5 views
0

質問:for a lookが終了した後にキー名を保持するにはどうすればいいですか? "for"の範囲外の変数にキー文字列を割り当てると、数値に変換されます。これを防止してキー名を維持する方法はありますか?おかげ「for」のスコープ外にオブジェクトキー名を保持するにはどうすればよいですか? Javascript

例:

var lastItem = undefined; 

function getKeyNames(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      lastItem = i;    
      objects = objects.concat(getObjects(obj[i], key, val)); 
     } else if (i == key && obj[key] == val) { 
      alert (lastItem); 
      objects.push(obj); 
     } 
    } 
    return objects; 
} 
alert (lastItem); 

警戒関数内(およびための内側)キーの実際の文字列名をoutputesが、私は、関数の外に警告するとき、私は番号を取得します。任意のアイデアキーの文字列名を保持する方法は?ただ、私はオブジェクトの値ではなく、キーの実際の名前について話しています。

+1

コードが不完全です。 'getKeyNames()'はどこで呼びますか? – slebetman

+0

最初のif文の後に字下げを行うと、構文エラーが混乱します(閉じた中括弧が多すぎます)。それを修正できますか? – maerics

+0

また、「getObjects」関数はどのように定義されていますか? – maerics

答えて

2

作品罰金:正確には、あなたが関数に渡している何を、

var foo = { foo : 22, bar : 42 }; 
for(var i in foo); 
alert(i); // "bar" 

0

あなたの例は正常です。 getKeyNamesが呼び出された後、lastValueはオブジェクト内で最後に見つかったキーを保持します。

しかし、あなたの例ではgetKeyNamesが呼び出されないので、alert(lastValue)は "未定義"と警告する必要があります。

あなたはどこかでそれを呼び出していて、lastValueに数字が含まれていることがわかっているのであれば、おそらくあなたのオブジェクトに数字が含まれているからでしょう。たとえば、for (var i in ['a','b','c'])は、「長さ」、「0」、「1」、「2」を繰り返します。

関連する問題