次のjsonオブジェクトがあります:
var json = {
"Lofts": "none",
"Maisons": "2",
"HOMES": [{
"home_id": "1",
"price": "925",
"num_of_beds": "2"
}, {
"home_id": "2",
"price": "1425",
"num_of_beds": "4",
}, {
"home_id": "3",
"price": "333",
"num_of_beds": "5",
}]
};
このオブジェクトをフィルタリングし、home_id = 2のHOMESプロパティを維持するにはどうすればよいですか?
結果:
var json = {
"Lofts": "none",
"Maisons": "2",
"HOMES": [{
"home_id": "2",
"price": "1425",
"num_of_beds": "4",
}]
};
オブジェクトを循環させてすべてのプロパティ(ロフトとメゾンも含む)をマンテインできる方法はありますか?
ありがとう
Array#filter
とし、結果をプロパティHOMES
に直接割り当てます。
var json = { "Lofts": "none", "Maisons": "2", "HOMES": [{ "home_id": "1", "price": "925", "num_of_beds": "2" }, { "home_id": "2", "price": "1425", "num_of_beds": "4", }, { "home_id": "3", "price": "333", "num_of_beds": "5", }] };
json.HOMES = json.HOMES.filter(function (a) {
return a.home_id === '2';
});
document.write('<pre>' + JSON.stringify(json, 0, 4) + '</pre>');
ユーティリティライブラリ Lodash を使用すると、_home_id
_が一意の場合、メソッド find を使用できます。
Find:collection
(Array | Object)の要素を反復処理し、最初の要素predicate
を返します。述語は、3つの引数(値、インデックス|キー、コレクション)で呼び出されます。
__.find(collection, [predicate=_.identity])
_
コード:
_var json = {"Lofts": "none","Maisons": "2","HOMES": [{"home_id": "1","price": "925","num_of_beds": "2"}, {"home_id": "2","price": "1425","num_of_beds": "4"}, {"home_id": "3","price": "333","num_of_beds": "5"}]};
json.HOMES = [_.find(json.HOMES, {home_id: '2'})];
document.write('<pre>' + JSON.stringify(json, 0, 4) + '</pre>');
_
_<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.min.js"></script>
_
同じ_home_id
_のオブジェクトが複数ある場合は、 filter を作成する必要があります。
_.filter(collection, [predicate=_.identity])
Filter:collection
(Array | Object)の要素を反復し、すべての要素の配列を返します。述語は真実を返します。述語は、3つの引数(値、インデックス|キー、コレクション)で呼び出されます。
コード:
_var json = {"Lofts": "none","Maisons": "2","HOMES": [{"home_id": "1","price": "925","num_of_beds": "2"}, {"home_id": "2","price": "1425","num_of_beds": "4"}, {"home_id": "3","price": "333","num_of_beds": "5"}]};
json.HOMES = _.filter(json.HOMES, {home_id: '2'});
document.write('<pre>' + JSON.stringify(json, 0, 4) + '</pre>');
_
_<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.min.js"></script>
_