Javascriptのみで各オブジェクトの名前と値を取得するにはどうすればよいですか?
オブジェクトのプロパティにアクセスするには、2つの方法があります。
var obj = {a: 'foo', b: 'bar'};
obj.a //foo
obj['b'] //bar
または、動的に行う必要がある場合:
var key = 'b';
obj[key] //bar
オブジェクトとしてまだ持っていない場合は、 変換 にする必要があります。
より複雑な例として、ユーザーを表すオブジェクトの配列があると仮定しましょう。
var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
{name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];
2番目のユーザーのageプロパティにアクセスするには、users[1].age
を使用します。最初のユーザーの2番目の「favoriteFood」にアクセスするには、users[0].favoriteFoods[2]
を使用します。
別の例:obj[2].key[3]["some key"]
これは、2という名前の配列の3番目の要素にアクセスします。次に、その配列の「キー」にアクセスし、その3番目の要素に移動して、プロパティ名some key
にアクセスします。
アマダンが指摘したように、異なる構造をループする方法についても議論する価値があるかもしれません。
配列をループするには、単純なforループを使用できます。
var arr = ['a', 'b', 'c'],
i;
for (i = 0; i < arr.length; ++i) {
console.log(arr[i]);
}
オブジェクトをループするのはもう少し複雑です。オブジェクトがプレーンオブジェクトであることを絶対に確信している場合、プレーンfor (x in obj) { }
ループを使用できますが、 hasOwnProperty チェックを追加する方がはるかに安全です。これは、オブジェクトにプロパティが継承されていないことを確認できない場合に必要です。 (また、将来的にコードを少し証明します。)
var user = {name: 'Corbin', age: 20, location: 'USA'},
key;
for (key in user) {
if (user.hasOwnProperty(key)) {
console.log(key + " = " + user[key]);
}
}
(使用しているJS実装にはconsole.log
があると仮定していることに注意してください。そうでない場合は、代わりにalert
または何らかのDOM操作を使用できます。)
github のDouglas CrockfordによるJSON Parserを試してください。次に、以下に示すように、String変数からJSONオブジェクトを簡単に作成できます。
var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'
var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];
OK、JSコードは次のとおりです。
var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')
for (var event in data) {
var dataCopy = data[event];
for (data in dataCopy) {
var mainData = dataCopy[data];
for (key in mainData) {
if (key.match(/name|value/)) {
alert('key : ' + key + ':: value : ' + mainData[key])
}
}
}
}
var yourobj={
"c":{
"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
},
"o":{
"v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
"e":[{"name":"lens cleaner","value":1}]
},
"h":{
"d":[{"name":"hdmi cable","value":1},
{"name":"hdtv essentials (hdtv cable setup)","value":1},
{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
私の解決策
var obj = [];
for(n1 in yourjson)
for(n1_1 in yourjson[n])
for(n1_2 in yourjson[n][n1_1])
obj[n1_2[name]] = n1_2[value];
承認済みコード
for(n1 in yourobj){
for(n1_1 in yourobj[n1]){
for(n1_2 in yourobj[n1][n1_1]){
for(n1_3 in yourobj[n1][n1_1][n1_2]){
obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
}
}
}
}
console.log(obj);
結果
* []メソッドまたはドット表記を使用する場合は、distinct accessorizesを使用する必要があります