2017-06-01 11 views
0

私はスタッフの配列の最初のアイテムの名前を取得するために以下のオブジェクトを持っています。javascriptを使ってオブジェクト内のアイテムにアクセスするためのキーを作成

const staffObj = { 
    "staff":[ 
    { "name": "tom"}, 
    { "name": "sam"} 
    ] 
} 

私は

console.log(staffObj['staff'][0]['name']) 
console.log(staffObj.staff[0].name) 

いずれかを実行して、この操作を行うことができます。しかし、私がやりたいことは、私が正しいとは何 例えば

const currentField = 'name'  
const firstITem = ['staff'][currentField ] 
console.log(firstITem,staffObj.firstITem) 

を作成変数から私のオブジェクトにアクセスされていますこれを達成するための構文?

+2

[ネストされたJavaScriptオブジェクトに文字列キーでアクセスする](https://stackoverflow.com/q/6491463/218196) –

+0

これはできません(オブジェクトにゲッターまたはプロキシを実装しない限り) – Bergi

答えて

1

Javascriptのソースコードのビットをそのような変数に入れることはできません。あなたは、各パートの変数が必要:

const currentType = 'staff'; 
const currentField = 'name'; 
console.log(staffObj[currentType][0][currentField]); 
0

あなたが変数としてcurrentField使用したい場合は、この操作を行うことができます。 firstITem[currentField]にはcurrentFieldが引用符で囲まれていないことに注意してください。それは変数であり、javascriptによって評価され、次にプロパティーnameとして適用されます。

const staffObj = { 
 
    "staff":[ 
 
    { "name": "tom"}, 
 
    { "name": "sam"} 
 
    ] 
 
}; 
 

 
console.log(staffObj['staff'][0]['name']); 
 
console.log(staffObj.staff[0].name) 
 

 
const currentField = 'name'; 
 
const firstITem = staffObj.staff[0]; 
 
console.log(firstITem[currentField]);

1

あなたはあなたのコード内で[0]を逃します。そのようなものには関数を使うべきです。例:

function firstFtaffField(staffObj, field) { 
    return staffObj['staff'][0][field]; 
} 

// Usage 
var name = firstFtaffField(staffObj, 'name'); 
+0

+ 1は "関数を使う"です。 – Bergi

-1

このような構文はありません。あなたはevalのを使用してそれを行うことができる唯一の方法:

const staffObj = { 
    "staff":[ 
    { "name": "tom"}, 
    { "name": "sam"} 
    ] 
}; 
const currentField = 'name'; 
const firstItem = ".staff[0]." + currentField; 
console.log(eval("staffObj" + firstItem)); 

currentFieldが実際に変数であれば、あなたにも、あなたがcurrentFieldを変更するたびにfirstItemを変更する必要があります。

+0

これは、 'eval'を**使わないべきです**です。 – Bergi

+0

地球温暖化評価による@Bergiは、まったく使用しないでください。これは、firstItemが実際には動的変数であるかどうかという疑問に答える唯一の解決策です。私は質問自体のため真であると信じています。 **変数から私のオブジェクトにアクセス**私は " – Viacheslav

+0

を作成します。いいえ、これは[唯一の解決策ではありません](https://stackoverflow.com/a/6394168/1048572)です。 – Bergi

0
ことはできませんが、あなたは関数として firstItemを定義することにより、同様の何かができる

const staffObj = { 
 
    "staff":[ 
 
    { "name": "tom"}, 
 
    { "name": "sam"} 
 
    ] 
 
}; 
 

 
const currentField = 'name'; 
 
const firstItem = x => x['staff'][0][currentField]; 
 
console.log(firstItem(staffObj))

0

は、あなたが機能のような何かをしたいかもしれないように見えます!簡単なメモとして

あなたが初心者であるように見えるので、:もちろんArrow Functions

var get = n => c => c[n]; // function given a nest returns a function given a container returns the nest inside the container 
var obj = { 
    staff:[ 
    { name: 'tom' }, 
    { name: 'sam' } 
    ] 
}; 

var getFirst = get(0); 
var getStaff = get('staff'); 

console.log(getFirst(getStaff(obj))); // { name: 'tom } 

これは組成にrelys関数型プログラミングであるので、それはあまりにも多くの代わりにあなたにあなたをすることができ送ることはありません場合より身近不可欠バージョンで行く:

var obj = { staff: [ {name:'tom'}, {name:'sam'}]}; 
var getStaff = obj => obj['staff']; 
var getFirst = ary => ary[0]; 

var staff = getStaff(obj); 
var firstStaff = getFirst(staff); 

// alternate 
//var getFirstStaff = obj => getFirst(getStaff(obj)); 

console.log(firstStaff); 

あなたがそこに両者の間にいくつかの類似点がありますが、組成物はいくつかのより高度なテクニック(組成、カリー化)と逆の順序で行われている見ることができるように。あなたはJSの初心者だと思うので、2番目の方法をお勧めします。最初の方法を理解するまで意味があります(約束事をもっと簡単に考える)

0

JavaScriptでsomeObject.somePropertyの表記はaですsomeObject['someProperty']の略語。あなたが動的に計算プロパティ名を持つようにしたい場合はsomeObject.somePropertyは関係なく、常にsomePropertyが多分保持している有効な変数であるという事実のsomeObject['someProperty']として解釈されますので、あなたは、「ドット」表記を使用することができないことを意味

文字列型の値。

また、someObject."someProperty"のようなものを使用しようとすると、有効なJS構文ではないため、Uncaught SyntaxError: Unexpected stringが得られます。

関連する問題