2010-03-30 22 views
1

這有點難受,闡明,但在PHP中,你可以這樣說:是否有允許分配/創建的語言功能的名稱?

$myArray['someindex'] = "my string";

,如果沒有命名,它會創建/分配的值,指數如果出現是一個索引,它會覆蓋現有的值。

比較這對使用Javascript這裏今天我必須做的檢查,像這樣:

if (!myObject[key]) myObject[key] = "value";

我知道這可能是有點挑剔一點,但有對PHP的能力的名稱(和許多其他語言)自己做這些檢查,而不是JavaScript的更詳細的(閱讀:PITA)方法?

編輯

我感到很困惑的苦惱。比方說,你要添加這種結構:

myobject = { 
    holidays : {easter : {date : 4/20/2010, 
          religion : Christianity} 
       holi : {date : 3/10/2010, 
         religion : hindu} 
} 

我有一個問題,今天,我收到的表格數據,我想通過建立一個目標是把它變成一棵樹的排序是這樣的。

當我開始我的循環時,如果樹沒有大部分構建到那一點,我無法制作新的索引,如myobject['holidays'][thisVariable][date] = 4/20/2010

如果不清楚,我會從我的另一臺計算機上抓取代碼示例,對於糟糕的想法感到抱歉。

+0

有一個最近的問題,聽起來同樣http://stackoverflow.com/questions/2497278/how-can-i-declare-a-value-deep -in-an-an-object-tree-using-variable-properties-in-jav,但沒有給出該功能的名稱 – goat 2010-03-30 03:27:57

回答

4

我想從Perl中'自動生成'http://en.wikipedia.org/wiki/Autovivification可能是相關的,但它的工作原理與您所描述的不同。維基頁面有一個很好的總結。像Ruby這樣的其他語言支持尚未分配的哈希鍵的「默認操作」鉤子,它也可以用於自動生成。

例如,在Ruby中:

 

>> h = Hash.new {|h,k| h[k] = {}} 
=> {} 
>> h["hello"]["world"] = 20 
=> 20 
>> h["hello"]["world"] 
=> 20 
 
+0

打敗我提及* autovivification *,儘管我沒有意識到它提到了Perl中特別的東西。我認爲這只是創建數據結構中「隱含」部分的一般概念。 – 2010-03-30 03:16:06

+1

這隻會工作一個級別。它可以用'h = Hash.new&block = lambda {| lambh,k |遞歸地完成lambh [k] = Hash.new&block}' – 2010-03-30 04:19:18

+0

不知何故,通過我的一個愚蠢的例子,你明白了我的問題並提供了瑣事答案。謝謝。 – 2010-03-30 04:32:22

6

你錯了。要在JavaScript中爲對象的鍵分配值,您不需要執行該檢查。該值將被分配是否已經有該鍵的值。

想一想。如果你必須首先在那裏獲得價值,你怎麼能把價值觀變成一個對象或散列?

1

Javascript與PHP完全相同:myObject [key] =「value」將覆蓋現有值(如果存在)。你能告訴我們爲什麼你認爲不然?

相關問題