2017-10-04 3 views
0

私はこの形式の配列を持っています。複数のサブアレイ全体(A-で始まる)をプッシュしようとすると、新しい配列に条件が満たされ、配列形式が保持されます。以下のコードでは成功しません。サブアレイ全体をプッシュ

アレイ:これまで

{"#VER": { 
    "A-1": { 
     "verdatum": "2016-07-08", 
     "vertext": "1073, Almi", 
     "trans": [{ 
      "account": "1510", 
      "amount": "52500.00" 
     }, { 
      "account": "3010", 
      "amount": "-42000.00" 
     }, { 
      "account": "2611", 
      "amount": "-10500.00" 
     }] 
    }, 
    "A-2": { 
     "verdatum": "2016-07-08", 
     "vertext": "1074, Text", 
     "trans": [{ 
      "account": "1510", 
      "amount": "15000.00" 
     }, { 
      "account": "3010", 
      "amount": "-12000.00" 
     }, { 
      "account": "2611", 
      "amount": "-3000.00" 
     }] 
    } 
} 
} 

コード、しかし、あなたはここで、オブジェクトではなく、配列で作業している配列

var newarray = []; 
$.each(array["#VER"], function(i, item) { 
if (condition for subarray) { 
    newarray.push(i,item); 
} 
}); 

答えて

1

の形式を変更します。このコードは動作するはずです:

var data = { ... };       // your original data object 
var filteredData = filterData(data); 

function filterData(data) { 
    var verData = data['#VER']; 
    var filteredVerData = {}; 

    $.each(verData, function(key, value) { 
    if(value.vertext === '1073, Almi') { // your condition 
     filteredVerData[key] = value; 
    } 
    }); 

    return { 
    '#VER': filteredVerData 
    }; 
} 

しかし、あなたは「#VER」のような多くのルート鍵を持っていて、それらのすべてをフィルタリングする必要がある場合は、1つの以上のループを記述する必要があると思います:

var data = { ... };       // your original data object 
var filteredData = filterData(data); 

function filterData(data) { 
    var result = {}; 

    $.each(data, function(verKey, verData) { 
    $.each(verData, function(aKey, aData) { 
     if(aData.vertext === '1073, Almi') { // your condition 
     result[verKey] = result[verKey] || {}; 
     result[verKey][aKey] = aData; 
     } 
    }); 
    }); 

    return result; 
} 
+0

で実際の生活if文は複雑なフィルタであり、複数のサブ配列がプッシュされます –

+0

@KevinLindmark私は答えを更新しました。 – nrg

+0

もちろん、ありがとう!プッシュと複雑にしたい...なぜか分からない –

関連する問題