JavaScriptオブジェクトが与えられた場合、それをオブジェクトの配列(それぞれキー、値を持つ)に変換するにはどうすればよいですか?
例:
var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }
結果は次のようになります:
[
{ key: 'firstName', value: 'John' },
{ key: 'lastName', value: 'Doe' },
{ key: 'email', value: '[email protected]' }
]
var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }
var output = Object.entries(data).map(([key, value]) => ({key,value}));
console.log(output);
これに触発された 投稿
map
関数を使用する
var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' };
var result = Object.keys(data).map(key => ({ key, value: data[key] }));
console.log(result);
オブジェクトのプロパティを反復処理し、それぞれに対して新しいオブジェクトを作成できます。
var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' };
var result = [];
for(var key in data)
{
if(data.hasOwnProperty(key))
{
result.Push({
key: key,
value: data[key]
});
}
}
前の答えから、もっと良い方法があると思うようになりました...
Object.keys(data).map(function(key) {
return { key, value: data[key] };
});
または、矢印関数を使用するES6で:
Object.keys(data).map((key) => ({ key, value: data[key] }));
あなたの人生を楽にし、マップでes6構文を使用するだけです
var output = Object.keys(data).map(key => {
return {
key: key,
value: data[key]
};
})
var result = [];
for(var k in data) result.Push({key:k,value:data[k]});
これを行うための代替方法で、マルチレベルオブジェクトで機能し、再帰を使用しません。
var output = []
var o = {
x:0,
y:1,
z:{
x0:{
x1:4,
y1:5,
z1:6
},
y0:2,
z0:[0,1,2],
}
}
var defer = [ [ o ,[ '_root_' ] ] ]
var _defer = []
while(defer.length){
var current = defer.pop()
var root = current[1]
current = current[0]
for(var key in current ){
var path = root.slice()
path.Push(key)
switch( current[key].toString() ){
case '[object Object]':
_defer.Push( [ current[key] , path ] )
break;;
default:
output.Push({
path : path ,
value : current[key]
})
break;;
}
}
if(!defer.length)
defer = _defer.splice(0,_defer.length)
}
[
{ path: [ '_root_', 'x' ], value: 0 },
{ path: [ '_root_', 'y' ], value: 1 },
{ path: [ '_root_', 'z', 'y0' ], value: 2 },
{ path: [ '_root_', 'z', 'z0' ], value: [ 0, 1, 2 ] },
{ path: [ '_root_', 'z', 'x0', 'x1' ], value: 4 },
{ path: [ '_root_', 'z', 'x0', 'y1' ], value: 5 },
{ path: [ '_root_', 'z', 'x0', 'z1' ], value: 6 }
]
または、ワイルドになり、key
およびvalue
キーをカスタマイズ可能にします。
module.exports = function objectToKeyValueArray(obj, keyName = 'key', valueName = 'value') {
return Object
.keys(obj)
.filter(key => Object.hasOwnProperty.call(obj, key))
.map(key => {
const keyValue = {};
keyValue[keyName] = key;
keyValue[valueName] = obj[key];
return keyValue;
});
};