2017-04-14 6 views
0

次のオブジェクトから、最大のインデックスキー、つまり4を持つプロパティから「空気」読み取り値を取得するにはどうすればよいですか? (30.9)オブジェクト内で最大のインデックスキーを持つプロパティを取得する

{ 
    1: { 
    air: "31.2", 
    evap: "25.3", 
    t_condenser: "43.8" 
    }, 
    2: { 
    air: "31.1", 
    evap: "25.3", 
    t_condenser: "43.6" 
    }, 
    3: { 
    air: "31.0", 
    evap: "25.3", 
    t_condenser: "43.5" 
    }, 
    4: { 
    air: "30.9", 
    evap: "25.2", 
    t_condenser: "43.3" 
    } 
} 

私は最後のキーを取得しようとする、次のことを試してみましたが、それは単に未定義読み取ります

$.getJSON("handler.php?action=fetchLAE", function(data){ 

    console.log(data.length); 

}); 
+2

。また、それは "JSON配列"でもありません。 JSONは文字列形式であり、データ構造ではありません。 –

+0

なぜこのためにオブジェクトを使用するのですか?なぜ配列を使用しないのですか?次に、スキャンの代わりに、単に 'data [data.length-1] .air'です。 –

答えて

2

注:データがひどくフォーマットされています。配列と同じように、APIはObjectを返します。

対処:データ中で最も高いキーを見つける(WICHがオブジェクトである):

data[Object.keys(data).sort().pop()].air 

説明:

Object.keys(data) 

例えばアレイのようなすべてのプロパティを取得します[1,4,3,2]。

今、私たちは、昇順にソートし、最後を取る:

.sort().pop() 

は、だから我々は、オブジェクトの外に、このプロパティを取り、その空気値を取る

data[4].air 

http://jsbin.com/setibevozu/edit?console

0

です有効なJSONではなく、javascriptオブジェクトです。

Object.keys関数を使用してオブジェクトのプロパティを取得し、lengthプロパティを使用して最後の要素またはプロパティに到達することができます。

console.log(obj[Object.keys(obj).length].air);

var obj = { 
 
1: { 
 
air: "31.2", 
 
evap: "25.3", 
 
t_condenser: "43.8" 
 
}, 
 
2: { 
 
air: "31.1", 
 
evap: "25.3", 
 
t_condenser: "43.6" 
 
}, 
 
3: { 
 
air: "31.0", 
 
evap: "25.3", 
 
t_condenser: "43.5" 
 
}, 
 
4: { 
 
air: "30.9", 
 
evap: "25.2", 
 
t_condenser: "43.3" 
 
} 
 
}; 
 

 
console.log(obj[Object.keys(obj).length].air);

+0

これは、オブジェクトに連続した数字キーのみが含まれており、1から始まることを前提としています。 –

+0

@Derek朕會功夫、はい、それはデータにOPに含まれているものです。 – Agalo

1

あなたはObject.keys(を持つオブジェクトのキーを取得)して、最高のものを得るためにMath.maxを使用することができます。オブジェクトではなく、配列の

var json = { 
 
    1: { 
 
    air: "31.2", 
 
    evap: "25.3", 
 
    t_condenser: "43.8" 
 
    }, 
 
    2: { 
 
    air: "31.1", 
 
    evap: "25.3", 
 
    t_condenser: "43.6" 
 
    }, 
 
    3: { 
 
    air: "31.0", 
 
    evap: "25.3", 
 
    t_condenser: "43.5" 
 
    }, 
 
    4: { 
 
    air: "30.9", 
 
    evap: "25.2", 
 
    t_condenser: "43.3" 
 
    } 
 
}; 
 

 

 
var maxKey = Math.max(...Object.keys(json)); 
 
var lastElementAir = json[maxKey].air; 
 

 
console.log(lastElementAir);

+2

ちょっとしたことに、この回答はES6 +でのみ利用可能なスプレッド演算子を使用しています。 ES5に相当する: 'Math.max.apply(Math、+ Object.keys(json))'。 –

関連する問題