94

与えられた:

var peoples = [
  { "attr1": "bob", "attr2": "pizza" },
  { "attr1": "john", "attr2": "sushi" },
  { "attr1": "larry", "attr2": "hummus" }
];

募集:

たとえばattr === valueattr1 === "john"またはattr2 === "hummus"

更新: 質問を注意深く読んでください。$.inArray を介してオブジェクトを検索したり、特定のオブジェクト属性の値を取得したりしたくありません。あなたの答えのためにこれを考慮してください。ありがとう!

4

7 に答える 7

21

プロトタイプに干渉せずにオブジェクト自体をチェックしたい場合は、次を使用しますhasOwnProperty()

var getIndexIfObjWithOwnAttr = function(array, attr, value) {
    for(var i = 0; i < array.length; i++) {
        if(array[i].hasOwnProperty(attr) && array[i][attr] === value) {
            return i;
        }
    }
    return -1;
}

プロトタイプ属性も含めるには、次を使用します。

var getIndexIfObjWithAttr = function(array, attr, value) {
    for(var i = 0; i < array.length; i++) {
        if(array[i][attr] === value) {
            return i;
        }
    }
    return -1;
}
于 2012-06-29T07:53:53.150 に答える
9

jQuery .each()の使用

var peoples = [
  { "attr1": "bob", "attr2": "pizza" },
  { "attr1": "john", "attr2": "sushi" },
  { "attr1": "larry", "attr2": "hummus" }
];

$.each(peoples, function(index, obj) {
   $.each(obj, function(attr, value) {
      console.log( attr + ' == ' + value );
   });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

forループの使用:

var peoples = [
  { "attr1": "bob", "attr2": "pizza" },
  { "attr1": "john", "attr2": "sushi" },
  { "attr1": "larry", "attr2": "hummus" }
];

for (var i = 0; i < peoples.length; i++) {
  for (var key in peoples[i]) {
    console.log(key + ' == ' + peoples[i][key]);
  }
}

于 2012-06-29T07:59:30.257 に答える
5

あなたの質問に対する直接的な答えではありませんが、言及する価値があると思いますが、あなたの質問は「キー値ストレージで名前で物事を取得する」という一般的なケースに当てはまるように思われるからです。

「人々」の実装方法に厳密でない場合は、適切な人を取得するためのより JavaScript っぽい方法は次のようになります。

var peoples = {
  "bob":  { "dinner": "pizza" },
  "john": { "dinner": "sushi" },
  "larry" { "dinner": "hummus" }
};

// If people is implemented this way, then
// you can get values from their name, like :
var theGuy = peoples["john"];

// You can event get directly to the values
var thatGuysPrefferedDinner = peoples["john"].dinner;

これがあなたが望んでいた答えでない場合は、その「キー/値」の質問に興味がある人に役立つかもしれません.

于 2012-06-29T08:07:21.283 に答える
4
function getIndexByAttribute(list, attr, val){
    var result = null;
    $.each(list, function(index, item){
        if(item[attr].toString() == val.toString()){
           result = index;
           return false;     // breaks the $.each() loop
        }
    });
    return result;
}
于 2012-06-29T07:58:12.663 に答える
1

このようにしてください: -

var peoples = [
  { "name": "bob", "dinner": "pizza" },
  { "name": "john", "dinner": "sushi" },
  { "name": "larry", "dinner": "hummus" }
];

$.each(peoples, function(i, val) {
    $.each(val, function(key, name) {
        if (name === "john")
            alert(key + " : " + name);
    });
});

出力:

name : john

ライブデモを参照

于 2012-06-29T08:04:30.990 に答える