3

おそらく、配列内のオブジェクトのインデックスを出力するだけの関数を作成する必要があります。明らかに、$。inArrayを使用すると、以下の例ではこれが問題なく返されます。

array = ['one', 'two', 'three'];

$.inArray('one', array) // 0

より複雑な配列を使用して、ネストされたオブジェクトのインデックスを見つけるにはどうすればよいですか?

array = [
    {
        name: 'One', // index??
        data: {
            title: 'Title One',
            content: 'Content One'
        }
    },
    {
        name: 'Two',
        data: {
            title: 'Title Two',
            content: 'Content Two'
        }
    },
    {
        name: 'Three',
        data: {
            title: 'Title Three',
            content: 'Content Three'
        }
    }
];

$ .grep()メソッドindexOf()について聞いたことがありますが、オブジェクトが含まれているインデックスの整数を返すためにどちらを使用すればよいかわかりません。

4

3 に答える 3

5

事前に作成された関数は必要ありません。配列を反復処理してnameプロパティを比較するだけです。

function findValue(array, nameWeAreLookingFor) {
    for(var i = 0; i<array.length; i++) {
        if(array[i].name === nameWeAreLookingFor) return i;
    }
    return -1;
}
于 2012-07-26T02:04:40.800 に答える
2

組み込み関数はありませんが、独自のすべてのフレーバーを簡単に作成できます。また、演習として、それらを使用してjQueryを拡張することもできます。

var array = [{
    name: 'One',
    // index??
    data: {
        title: 'Title One',
        content: 'Content One'
    }},
{
    name: 'Two',
    data: {
        title: 'Title Two',
        content: 'Content Two'
    }},
{
    name: 'Three',
    data: {
        title: 'Title Three',
        content: 'Content Three'
    }}];

function findByName(name) {
    var index;
    $(array).each(function(i, e) {
        if (e.name && e.name == name) {
            index = i;
            return false;
        }
    });
    return index;
}
console.log(findByName("One")); // prints 0

// and now even better ... find by any property


function findByProperty(objects, prop, value) {
    var index;
    $(objects).each(function(i, e) {
        if (e[prop] && e[prop] == value) {
            index = i;
            return false;
        }
    });
    return index;
}

// usage
var index = findByProperty(array, "name", "One");
console.log(index); // prints 0
index = findByProperty(array, "name", "Three");
console.log(index); // prints 2
// and even more powerful


function findByFilter(objects, filter) {
    var index;
    $(objects).each(function(i, e) {
        if (filter(i, e)) {
            index = i;
            return false;
        }
    });
    return index;
}

index = findByFilter(array,function(i,e){ return e.data.title=="Title Two"; });
console.log(index); // prints 1
于 2012-07-26T02:35:17.973 に答える
0

nameプロパティをインデックスとして使用できます。

このコードを試してください:

var indexOfObj = function(array,objName){
    var len = array.length;
    while(--len>=0 && array[len].name!==objName);
    return len;
}

この関数は-1、objが配列に見つからなかった場合に返されます。

于 2012-07-26T02:06:20.540 に答える