2017-02-07 63 views
-1

我怎樣才能使這發生在JavaScript?javascript通過鍵可訪問的對象的集合

People[key1][0].FirstName = "First1-k1"; 
People[key1][0].LastName = "Last1-k1"; 
People[key1][1].FirstName = "First2-k1"; 
People[key1][1].LastName = "Last2-k1"; 
People[key2][0].FirstName = "First1-k2"; 
People[key2][0].LastName = "Last1-k2"; 
People[key2][1].FirstName = "First2-k2"; 
People[key2][1].LastName = "Last2-k2"; 

或許:

People[key2].Index[1].LastName = "Last2-k2"; 

其他澄清:

SomeObject["somekey"][0].FirstName = "whatever"; 
SomeObject["somekey"][1].FirstName = "whatever"; 
SomeObject["someotherkey"][0].FirstName = "whatever"; 
SomeObject["someotherkey"][1].FirstName = "whatever"; 

感謝

+1

'key1'是一個變量(如'key2',你的名字是......)。它的價值是什麼? –

+0

你的意思是'var people = {「key1」:{「firstname:」First1-k1「,」LastName「:」Last1-k1「},」key2「:{......}}' people [「key1」]'將獲得key1或var families的姓氏和名字= {「fam1」:[{「firstname:」First1-k1「,」LastName「:」Last1-k1「},{」firstname: 「First1-k2」,「LastName」:「Last1-k2」}]}'then'people [「fam1」] [1]'將獲得fam1的名字和姓氏1 – mplungjan

+0

我需要將行集合People [key1]以及People [key2],People [key3] ...等可能類似於:People [thekey] .FirstName [0],People [thekey] .FistName [1] ..等 – Hawker

回答

0

在使用性能和指標一起,你所談論的對象(其中有屬性)和數組(有索引)。

你的初始語法:People[key1],意味着People或者是一個陣列,其中key1是保持一個非負數或People一個變量是一個對象,其中key1是一個字符串將作爲的一個屬性的名稱目的。

所以,你可以有:

var People = ["John","Paul","Ringo","George"]; 
 
    var key1 = 3; // Arrays use non-negative numbers as indexes 
 
    console.log(People[key1]); // "George"

或者,你可以有:

var People = { 
 
     first:"John", 
 
     last: "Lennon" 
 
    } 
 

 
    var key1 = "first"; // Objects use strings as property names 
 
    console.log(People[key1]); // "John"

現在,如果我們繼續您的代碼: People[key1][0],你表示key1應該用一個數字索引,這意味着People[key1]應該返回一個數組。這將意味着,People可能是一個含陣列陣列或與陣列對象作爲屬性:

陣列與嵌套的數組:

 var People = [ 
 
     ["John","Paul","Ringo","George"], 
 
     ["Moe","Larry","Curly","Shemp"] 
 
    ]; 
 

 
    var key1 = 1; 
 
    console.log(People[key1][0]); // "Moe"

對象與數組作爲屬性值:

 var People = { 
 
     Beatles: ["John","Paul","Ringo","George"], 
 
     ThreeStooges: ["Moe","Larry","Curly","Shemp"] 
 
    }; 
 

 
    var key1 = "Beatles"; 
 
    console.log(People[key1][0]); // "John"

最後,當我們添加語法的你最後的作品:People[key1][0].FirstName,我們可以看到,People[key1][0]必須因爲你是來訪問提供一個屬性名稱返回一個對象,所以最後結構仍然可以使用數組或對象,但可以看起來像這些:

var People = [ 
 
     [ 
 
      { firstName: "John" }, 
 
      { firstName: "Paul"} , 
 
      { firstName: "Ringo"} , 
 
      { firstName: "George"} 
 
     ], 
 
     [ 
 
      { firstName:"Moe", lastName: "Stooge" }, 
 
      { firstName: "Larry", lastName: "Stooge" }, 
 
      { firstName: "Curly", lastName: "Stooge" }, 
 
      { firstName:"Shemp", lastName: "Stooge" } 
 
     ] 
 
    ]; 
 

 
    var key1 = 1; 
 
    console.log(People[key1][0].firstName); // "Moe" 
 

 
    People[key1][0].firstName = "First-K2"; 
 
    console.log(People[key1][0].firstName); // "First-K2"

與認爲具有屬性的對象嵌套數組陣列與數組作爲屬性值存儲具有屬性的對象對象:

var People = { 
 
     Beatles: [ 
 
      { firstName: "John" }, 
 
      { firstName: "Paul"} , 
 
      { firstName: "Ringo"} , 
 
      { firstName: "George"} 
 
     ], 
 
     ThreeStooges: [ 
 
      { firstName:"Moe", lastName: "Stooge" }, 
 
      { firstName: "Larry", lastName: "Stooge" }, 
 
      { firstName: "Curly", lastName: "Stooge" }, 
 
      { firstName:"Shemp", lastName: "Stooge" } 
 
     ] 
 
    }; 
 

 
    var key1 = "Beatles"; 
 
    console.log(People[key1][0].firstName); // "John" 
 

 
    People[key1][0].firstName = "First-K2"; 
 
    console.log(People[key1][0].firstName); // "First-K2"

現在,當你的語法可能意味着兩種不同的結構既可以工作,你真的需要花一些時間和思考關於這個從內到外。您看起來擁有firstName屬性的對象作爲結構中最深的構造,但是從那裏向外工作,似乎只是在沒有任何特定原因的情況下添加圖層。具有firstName屬性的對象是否應枚舉?如果是這樣,將它們放在一個數組中是有意義的。但是,爲什麼要將它們包裝起來呢?你需要決定。

+0

非常感謝@Scott Marcus!你提到的代碼的最後一部分正是我所期待的。這很難解釋爲什麼我需要這種方式。這是我正在做的一個AngularJS應用程序的一部分。其實人名與我的代碼無關,我只是用它作爲例子。實際對象看起來更像:'OptionsLevel1 [OptionSubtypeID] [index] .OptionID'和'OptionsLevel1 [OptionSubtypeID] [index] .OptionName'。這將需要永遠解釋整個事情....但無論如何,謝謝! – Hawker

+0

@Hawker不客氣。請不要忘記投票並將我的帖子標記爲答案。祝你好運! –

+0

出於某種原因,由於我不熟悉使用stackoverflow,因此不會讓我的「投票」顯示出來。我如何將它標記爲已回答?此外,這個問題被標記爲暫停......這讓我感到困惑。你顯然明白了這個問題,那麼爲什麼它會被擱置,因爲其他一些人不明白? – Hawker