1

重複の可能性:
配列のプロパティに基づいて配列の要素のインデックスを取得する

私は、HTML、jQuery、JS、CSS、その他すべての通常のものを使用して名簿を作成する作業を行っています。これは単なるCRUDアプリであり、特別なものではありません。私は中級レベルで、作成する方法に少し問題があります。本の中の一人一人を対象にしています。各オブジェクトは、などの名前で作成されobj0ます。次に、そのオブジェクトには次のような値が割り当てられます。

obj0.name = "Billy";
obj0.num = "1-207-233-8846";
obj0.address = "18 Phillmore Rd, Miami, Florida";

これらのプロパティのいずれかが機能しない場合は無視して、例として作成しました。

今、私は、どのオブジェクトが名前を持っているかを見つける必要がある可能性が高いことに気づいています"Billy"obj0ビリーを見つけるため にユーザーが入力しなければならないようにしたくありません。

名簿に複数のビリーを含めることができるようにするためobj0ではなく、オブジェクトに名前を付けています。Billy

さて、実際の質問です。nameプロパティが。のオブジェクトの名前またはID(不明な場合に備えて取得したい)を取得
するにはどうすればよいですか。 obj0 "Billy"

複数のオブジェクトがあると仮定します。obj1他の人はと呼ばれるでしょうobj2

可能であれば、"1-207-233-8446"電話番号やその他の電話番号/住所の番号でオブジェクトを検索できるようにしたいと思います。

4

3 に答える 3

2

なぜオブジェクトを何かと呼ぶのですか?obj0、obj1など。。。

考えてみてください(おそらくすでにこれに答えている右側のリンクに満足していない限り):

function Person( name, num, address ) {
    this.name = name;
    this.num = num;
    this.address = address;
}

次に、そのようなオブジェクトの配列を作成します。

var persons = [
    new Person( "Billy", "1-207-233-8846", "18 Phillmore Rd, Miami, Florida" ),
    new Person( "Bob", "2", "somewhere" )
];

検索が簡単になります。

for ( var i = 0; i < persons.length; ++i ) {
    if ( persons[ i ].name == "Billy" ) {
        // Found, do something with Billy
        break;
    }
}
于 2013-01-13T18:39:03.257 に答える
1

listを使用してすべてのオブジェクトを格納し、リストを繰り返して、検索条件が満たされているかどうかを確認します。この場合、「billy」です。listを使用したくない場合は、オブジェクトの配列を使用してから、代わりにforループで繰り返します。これがお役に立てば幸いです。このためのコードが必要かどうか教えてください。

于 2013-01-13T18:38:19.237 に答える
0

オブジェクトを配列に入れると(すべての名前を付けるよりもはるかに良い選択だと思います)、このfilterメソッドを使用して、基準に一致するアイテムの新しい配列を取得できます。

var bobs = addresses.filter(function(address) { return address.name === "Bob"; });

filterは配列を返すことに注意してください。しかし、考えてみれば、これは正しいです。アドレス帳に複数のボブを簡単に含めることができるからです。

これについての素晴らしい点は、渡す関数を返す関数を記述できることですfilter

function withName(name) {
  return function(address) {
    return address.name === name;
  };
}

function withNumber(number) {
  return function(address) {
    return address.number === number;
  }
}

var bobs = addresses.filter(withName("Bob"));

次に、これらの関数を組み合わせてより具体的なクエリを作成する関数を作成できます。

function and(p1, p2) {
  return function(address) {
    return p1(address) && p2(address);
  }
}

var billy = addresses.filter(and(withName("Billy"), withNumber("1-207-233-8846")))[0];
于 2013-01-13T18:55:55.963 に答える