0

2 つの名前パラメーターを含むオブジェクトがあります。以下の例を参照してください。データに到達するには、オブジェクトをループする必要があることは理解していますが、これは煩わしいと感じています。簡単な方法でデータを取得するより良い方法はありますか?

var obj = {[[[{name:'one'},{name:'two'}]]]};

$.each(obj,function(i,val){
    var first = [] // i will get first time
    $.each(first, function(i, val){
        var second = [] //i will get second time and third later fourth  // like so?
    })
})

eachこれは、関数を 4 回ループしてname値を取得する必要があるということですか? もしそうなら、それを得る正しい方法はどれですか?同じ関数を使用してデータを取得する方法はありますか?

4

3 に答える 3

1

Your obj is invalid.

So, try something this:

var obj = [[[{
        name: 'one'},
    {
        name: 'two'}]]];

$.each(obj[0][0], function() {
  alert( this.name );
});

DEMO


Another one (for any level of array)

var obj = [[[{
    name: 'one'},
{
    name: 'two'}]]];

function getObject(obj) {
    if (Object.prototype.toString.call(obj[0]) == '[object Array]') {
        getObject(obj[0]);
    } else {
        $.each(obj, function() {
            alert(this.name);
        });
    }
}

getObject(obj);​

DEMO


Note

{} always contains data with key : value pair. So, in your case { [ .. ] } is invalid format of object. some correct formats of object may be:

{ key1: value1, key2: value2, .. }

{ data: [{key1: value1}, {key2: value2}] }

Suggestion

If you've option then change the format of your obj like below:

var obj = [
   { name: 'one' },
   { name: 'two' }
];

And try following code simply:

$.each(obj, function() {
  alert( this.name );
});
于 2012-08-14T10:44:07.747 に答える
1

再帰関数で検索する必要があります。n テーブルを使用してオブジェクトを使用できます。

var obj = [[[[{name:'one'},{name:'two'}]]]];

function troughTables(table){
    if(table instanceof Array && table.length == 1){
        troughTables(table[0]);
        return;
    }

    console.log("here is a content table");
}

troughTables(obj)

これにより、多くのテーブルを持つことができますが、条件は長さが 1 でなければならないということです。

于 2012-08-14T10:46:11.080 に答える
0

このオブジェクトを JSON にシリアル化し、正規表現でデータを取得できます。

また、配列を平坦化するために使用することもできます:

jQuery.map(obj, function(n){return n})

そして、次のような結果が得られます。

[{name:'one'},{name:'two'}]
于 2012-08-14T10:58:45.267 に答える