簡體   English   中英

更改默認的數組類型getter Javascript

[英]Change default array-type getter Javascript

我發現沒有辦法做到這一點。 但是,謝謝大家! 在javascript中,我可以覆蓋方括號來訪問字符串中的字符嗎?

我有這樣的事情:

function f() {
    var list = [{name: 'test'}, {name: 'test2'}];
}

我想從該函數內的列表中獲取屬性,我認為有些方法可以覆蓋default [],但我真的不知道要查找什么。

f[0] // {name: 'test'}
f['test2'] // {name: 'test2'}

除非您執行以下兩項操作之一,否則list變量將是f()私有變量。

首先 ,您可以嘗試從f()返回list ,以便隨后獲得所需的屬性。

function f() {
    var list = [{name: 'test'}, {name: 'test2'}];
    return list;
}

var f = f();
f[0] // {name: 'test'};
f['test'] // will return undefined; we'll come back to this

其次 ,我認為此選項可能是您在用'oop'標記問題時要查找的內容,可以使f()成為構造函數:

function f() {
    this.list = [{name: 'test'}, {name: 'test2'}];
}

var f1 = new f();
f1['list'][0] // {name: 'test'};
f1.list[0] // will also return {name: 'test'};
f1.list['test'] // still will return undefined...

...

您將無法使用['test']['test2']訪問值的原因是因為它們是您的值,而通常,這些值是我們要使用鍵在對象中訪問的值(在這種情況下, ['name'].name )。 因此,您可能想要的是這樣的東西:

f1.list[0].name // will return 'test'
f1.list[1].name // will return 'test2'

希望這能消除混亂。

只需使用對象而不是數組即可:

var byname = {
    "test": {name: 'test'},
    "test2": {name: 'test2'}
};
// bracket notation:
byname["test2"] // {name: 'test2'}
// dot notation:
byname.test // {name: 'test'}

由於您說過永遠都不會按索引訪問該結構,因此可以使用無序鍵值映射結構。 為了節省類型,您還可以從數組中動態創建該對象:

var list = [{name: 'test'}, {name: 'test2'}];

var byname = {};
for (var i=0; i<list.length; i++)
    byname[list[i].name] = list[i];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM