2017-04-19 284 views
1

讓我們假設我有一個傳遞給函數的對象屬性。在這種情況下,「名」充滿'myObject.name'(其值爲'Tom') - 所以基本上'Tom'被傳遞給函數的「名」僅通過屬性值獲取對象

function(name) { 
    do something //non-essential for my question 
} 

是否有可能獲得對象,其中'Tom'是財產,只是通過信息'Tom'?基本上我想要得到myObject

謝謝:)

+0

這幸運的是不可能的。 – zerkms

+0

不,你想通過這樣做完成什麼? – Ryan

回答

0

不,這是不可能的。

該函數知道的一個參數是指向字符串「Tom」,而不是指向內存中其他位置的字符串。

0

您可以將對象存儲在數組中,將數組過濾爲匹配傳遞給函數的參數的屬性名稱,方法是使用for..of loop,Object.entries(),該函數返回屬性數組,對象的值。

const data = Array(); 
 

 
const setObjectPropertyName = _name => { 
 
    data.push({[_name]:_name}); 
 
    return data 
 
} 
 

 
const getObjectByPropertyName = prop => { 
 
    let res = `${prop} property not found in data`; 
 
    for (let obj of data) { 
 
    for (let [key] of Object.entries(obj)) { 
 
     if(key === prop) return obj; 
 
    } 
 
    } 
 
    return res; 
 
} 
 

 
let s = setObjectPropertyName("Tom"); 
 
let g = getObjectByPropertyName("Tom"); 
 
let not = getObjectByPropertyName("Tome"); 
 

 
console.log(s,"\n", g, "\n", not);

0

免責聲明:你絕對不應該這樣做。我只發佈這個,因爲它實際上是可能的(有一些警告),只是真的不可取。

去的假設,這是在瀏覽器中運行,這一切都在全球範圍內(在腳本標籤等)上運行,你可以技術上遍歷window對象,檢查窗口中的任何對象的名稱屬性並確定它們的名稱屬性是否與傳遞給您的函數的名稱相匹配。

var myObject = { 
 
    name: 'Tom', 
 
    thisIs: 'so awful', 
 
    imSorry: true, 
 
}; 
 

 
function doSomethingWithName(name) { 
 
    for (var obj in window) { 
 
     var tmp = window[obj]; 
 
     if (Object(tmp) === tmp && tmp.name === name) { 
 
      return tmp; 
 
     } 
 
    } 
 
} 
 

 
console.log(doSomethingWithName(myObject.name));