次のようなObjectの配列があります。
_var obj = [
{a: 1, b: 5, c: 9},
{a: 2, b: 6, c: 10},
{a: 3, b: 7, c: 11},
{a: 4, b: 8, c: 12}
];
_
このようにArray.map()
を使用して単一のオブジェクトを取得する方法を知っています。
_var result = obj.map(x=>x.a)
_
これは私に次の結果を与えます
_[1, 2, 3, 4]
_
しかし、私は次のような結果が必要です:
_[
{a: 1, b: 5},
{a: 2, b: 6},
{a: 3, b: 7},
{a: 4, b: 8}
]
_
オブジェクトの配列から簡単に言えば、いくつかのフィールド(複数)のみを選択したい
どうやってするか ?
[1,2,3,4]
を生成するためのソリューションでは、x.a
は一部のマイクロ構文ではなく、実際には本格的なJavaScript式です。そのため、必要なプロパティを持つ新しいオブジェクトを作成するために、JavaScriptで置き換えることができます。
var result = obj.map(x=>{a: x.a, b: x.b});
... ほとんど。さらに複雑なのは、{
の後の=>
が、オブジェクトリテラルの始まりではなく、関数本体の始まりとして解釈されることです。これを回避するには、オブジェクトリテラルを、それ以外の場合はヌープな括弧で囲みます。
var result = obj.map(x=>({a: x.a, b: x.b}));
このための独自のカスタム関数を作成し、抽出する一連のプロパティを渡すことができます。 :
var array = [{a:1,b:5,c:9}, {a:2,b:6,c:10}, {a:3,b:7,c:11}, {a:4,b:8,c:12} ];
function extractProperties(arr, properties){
return arr.map((obj)=> Object.keys(obj).reduce((acc,key)=>{
if(properties.has(key))
acc[key] = obj[key];
return acc;
},{}));
}
let set = new Set(["a","b"]);
let result = extractProperties(array, set);
console.log(result);
set.add("c");
console.log("**************result2**********")
let result2 = extractProperties(array, set);
console.log(result2);
map()
を使用して、必要なプロパティを持つカスタムオブジェクトを返すことができます
var obj = [{a:1,b:5,c:9},
{a:2,b:6,c:10},
{a:3,b:7,c:11},
{a:4,b:8,c:12}
];
let op = obj.map(e => {
return { a:e.a, b: e.b };
})
console.log(op);