配列がある場合:
my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]
my_arrayに対してproperty_names配列を使用して、次の出力を取得するにはどうすればよいですか?:
subset_array = [[3,7],[5,6]]
配列がある場合:
my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]
my_arrayに対してproperty_names配列を使用して、次の出力を取得するにはどうすればよいですか?:
subset_array = [[3,7],[5,6]]
var my_array = [{a:3,b:4,c:7}, {a:5,b:8,c:6}];
var keys = ['a', 'c'];
my_array.map(function(d){
return keys.map(function(k) {
return d[k];
});
});
これはあなたに与え、あなた[[3, 7], [5, 6]]
が望むもののようです。
[廃止された最初の回答; OPが彼の質問を更新する前に]
使用o.a
してくださいo.c
-魔法は関係せず、子猫に害はありません!
[]
構文:o['a']
および-を使用することもできますが、通常は、動的プロパティ名(つまり、内部の引用符文字列の代わりに変数)o['c']
にアクセスする場合にのみ使用します。[]
両方の値を持つ配列が必要な場合:
var a_and_c = [o.a, o.c];
これで、とを使用a_and_c[0]
し[1]
てこれら2つの値にアクセスできます。
次の2つの表記でプロパティにアクセスできます。
andまたはand 。o.a
_o.c
o['a']
o['c']
編集
両方の値を含む新しい配列を作成する場合は、たとえば@Reidによって提案されたコードを使用して作成します。
[o.a, o.c]
2回目の編集
map
したがって、次のように関数内に配列を構築するだけです。
var filter = ["a"、 "c"、 "f"、 "zzz"]; // したほうがいい
subset_array = my_array.map(function(v){var newArr = [];
for( var i=0; i<filter.length; ++i ) {
if ( typeof v[ filter[i] ] !== 'undefined' ) {
newArr.push( v[ filter[i] ] );
}
}
return newArr;
});
ただし、プリミティブ型(例のint値など)を使用している限り、上記のコードはプロパティのクローンを作成することに注意してください。my_array
つまり、ある時点で値を変更しても、暗黙的に変更されることはありませんが、そこで値を再作成subset_array
または調整subset_array
する必要もあります。
これは完全な答えではありませんが、役立つと思います。
var values = []
var obj = {a: 1, b: 2, c: 3}
for (var prop in obj) {
if (obj.hasOwnValue(prop)) { // skip props in [[prototype]], no effect here
values.push(obj[prop])
}
}
values // -> [2, 1, 3] (in SOME UNDEFINED ORDER)
キーポイント:
values
たとえば、必要に応じて並べ替えますこれを拡張して、たとえば、さまざまな「除外」ルールを追加できます。また、さまざまな高階関数に適合させることもできます。
ハッピーコーディング。