javascript - 配列 - json 要素




どのようにjavascriptを使用して複雑なjsonオブジェクトをフィルタリングする? (2)

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>');

私は次の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",
    }]
};

私はオブジェクトを循環させることができ、すべてのプロパティ(ロフトやメゾン)をmanteinできる方法はありますか?

ありがとう


ユーティリティライブラリLodashを使用すると、 home_idが一意である場合にhome_idメソッドfind使用できます。

Findcollection (Array | Object)の要素を反復し、最初の要素のpredicate返すとtruthyが返されます。 述語は、(value、index | key、c​​ollection)という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

_.filter(collection, [predicate=_.identity])

Filtercollection (Array | Object)の要素を反復し、すべての要素の配列を返します。predicateはtruthyを返します。 述語は、(value、index | key、c​​ollection)という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>





filter