2

私は codeAcademy の JavaScript セクションに取り組んでおり、演習の 1 つに固執しています。これが私のコードです:

var friends = {
    bill:{
        firstName:"Bill",
        lastName: "Gates",
        number:"(206)555-5555",
        address:['One Microsoft Way', 'Redmond','wa','12345']
    }
};
var friends = {
    steve:{
        firstName:"Steve",
        lastName: "Jobs",
        number:"(555)555-5555",
        address:['One Apple Way', 'San Diego','ca','12345']
    }
};

var list = function()
{
    for (var something in friends)
    console.log(something);
}

var search = function(name)
{
    for (var contact in friends)
    {
        if (contact == name)
        {
            for (var contact_info in friends.name)
            {
            console.log(contact_info);
            }
        }
    }
}

for/in ループについてかなり混乱しています。私はしばらくこの演習に取り組んでおり、誰かが私を理解するのを手伝ってくれるかどうか疑問に思っていました. 主に検索機能。指定された名前がオブジェクトに含まれているかどうかを確認し、関連付けられている連絡先情報を出力できると想定しています。私は完全に迷っています。セクション全体を再起動しようとしましたが、それでも動かなくなりました。

4

3 に答える 3

1

Javascript では、for-in ループは各オブジェクト プロパティを通過します。

あなたの友人オブジェクトは、ビル・ゲイツを説明するオブジェクトでもあるプロパティを 1 つだけ持つように最初に作成されます。次に、これも 1 つのプロパティしか持たない別のオブジェクトによって上書きされますが、現在はスティーブ ジョブズを記述しています。

最後に、検索機能では、友達の各プロパティを調べて、それらを文字列と比較しています。for-inループ内にnameは、ループの現在の反復で使用されるプロパティの名前を含む変数があります。したがって、変数の名前 (つまり: steve) を使用すると、一致が得られます。オブジェクトに格納されている名前を一致させたい場合はname、関数の宣言で呼び出されていないパラメーターを使用し、次searchのようにチェックする必要があります。

if (contact.firstName == _name || contact.lastName == _name ||
    (contact.firstName + " " + contact.lastName) == _name)

friendsまた、Bill で変数を作成した後、Steve で再作成することにも注意してください。そのため、その変数には「連絡先」が 1 つしかありません。次のようにオブジェクト宣言を変更できます。

var friends = {}; // This creates an empty object

friends.bill = {
    firstName: "Bill",
    lastName: "Gates" // And so on...
};

friends.steve = {
    firstName: "Steve" // You get the drill
};

そして、あなたの友人のオブジェクトには、シリコンバレーの両方の海賊がいます.

于 2013-08-15T14:09:36.257 に答える
0

Javascriptのfor inループは、オブジェクトの各プロパティをループします。steve残念ながら、オブジェクト全体を 2 番目のvar friends = ...ステートメントで上書きするため、オブジェクトには 1 つのプロパティしかありません。オブジェクトをループすると、name変数は friends オブジェクト内の友達の文字列インデックスになります。一致する名前が見つかったら、 を使用して連絡先情報を使用できますfriends[name]。検索と同じ名前の友達を探している場合は、特定の名前を確認することをお勧めします。

余談ですが、Javascript は緩く型付けされた言語であるため、その名前の友達がいるかどうかを確認するために friends オブジェクト全体をループする必要はありません。コードサンプルは次のとおりです。

var friends = {
    bill: {
        firstName: 'Bill', 
        lastName: 'Gates'
    }, 
    steve: {
        firstName: 'Steve', 
        lastName: 'Jobs'
    }, 
    steve2: {
        firstName: 'Steve', 
        lastName: 'Doe'
    }
}, 
search1 = function(name) {
    if(friends[name] !== undefined) { //Is there a friend with this index
        //Yay, we have a friend with this index!
    }
    else {
        //Sorry, we don't have a friend with this index
    }
}, 
search2 = function(name) {
    name = name.toLowerCase(); //Case insensitive
    for(var friend in friends) {
        if(friends[friend].firstName.toLowerCase() == name) { //Does this person have the same first name
            //This friend has the same first name
        }
    }
};

search1('steve'); //Will only give us Steve Jobs
search2('steve'); //Will give us Steve Jobs and Steve Doe
于 2013-08-15T14:28:09.457 に答える
0

まず第一に、友人変数の定義が間違っています。Bill を Steve でオーバーライドします。

これに似ていると思われます

var friends = {
    bill:{
        firstName:"Bill",
        lastName: "Gates",
        number:"(206)555-5555",
        address:['One Microsoft Way', 'Redmond','wa','12345']
    },
    steve:{
        firstName:"Steve",
        lastName: "Jobs",
        number:"(555)555-5555",
        address:['One Apple Way', 'San Diego','ca','12345']
    }
};

今あなたの質問への答え。

function search(name)
{
    // Length of friends  object received using Object.keys
    for (var p = 0; p < Object.keys(friends).length ;p++)
    {
        if(friends[name] != undefined){
            // Add to console and stop function execution if match found.
            console.log(friends[name].firstName); 
            return;
        }
    }
}

いくつかの説明。"friends[name]" が定義されていない場合、指定された名前のオブジェクトがないことを意味します。オブジェクトが返される場合は、「firstName」またはオブジェクト内のその他のプロパティの値を取得するだけです。

于 2013-08-15T14:22:39.543 に答える