2017-01-10 66 views
0

使用下面的數據對象,我試圖編寫一個函數,該函數接受一個名稱(該名稱是數據中的標籤,如本例中的「GD」)和值。我想用下面我寫的下劃線的函數,但是我很難弄清楚如何寫出這段代碼,因爲我是一般的JS新手。任何輸入如何修改功能getOption()下劃線對象,獲取特定部分數據的函數?

var data = [{},{}, 
    { 
    field:"ran", 
    indexable:true, 
    label:"R", 
    options: [ 
    {},{}, 
    { 
    category_value:"200", 
    label:"GD" 
    },{},{} 
    ] 
    },{} 
] 


function getOption (name, value) { 
    return _.findWhere(data.options, {label: name}); //return the category_value of the name, if "GD" is the name, the output of this function should be 200 
    } 
+0

如果有多個同名的標籤會怎麼樣? –

+0

@SandeepNayak這是我想用這個函數解釋的東西,並且很難搞清楚。任何輸入? –

+0

'_.findWhere'只會取得第一個匹配,而不會後續匹配 –

回答

0

根據該文檔,

_.findWhere列表性質

看起來通過列表並返回 匹配所有的所述第一值屬性中列出了鍵值對 。

如果未找到匹配項,或者列表爲空,則返回undefined。

_.findWherepublicServicePulitzers,{編輯部「紐約時報」}); => {year:1918,新聞編輯部:「紐約時報」,理由:「爲其公共服務在全文發佈如此之多的官方報道,
文件和歐洲政治家有關進展 進行的演講和進行戰爭「。}

看起來像你必須指定屬性名稱和屬性值。在這種情況下,分別是「標籤」和「GD」。

試試這個:

var data = [{},{}, 
    { 
    field:"ran", 
    indexable:true, 
    label:"R", 
    options: [ 
    {},{}, 
    { 
    category_value:"200", 
    label:"GD" 
    },{},{} // why so many initalized empty arrays? 
    ] 
    },{} 
] 


function getOption (name, value) { 
    return _.findWhere(data.options, {label: "GD"}); // returns the whole array 
    // try var result = _.findWhere(data.options, {label: "GD"}); 
    // then return result.category_value; 
} 

只是推薦以下URL有些相關的帖子。它可能對你有用,它不使用額外的庫:dynamic access to an array in javascript

+0

數據對象內部會有多個標籤,是否可以用更動態的方式重新編寫代碼的'{label:「GD」}'部分?由於它的功能將採用任何名稱,並且每個名稱都有自己的標籤。 –

+0

'function getOption(name,value){ return _.findWhere(data.options,{name:value}); }' 我想。這應該與getOption(「label」,「GD」)格式並行工作。測試需要您自擔風險(因爲我相信這個版本存在語法問題)。然後,我再次以多個結果的標題和價值相同的動作。還有一個「where」函數返回所有值。 – phenominas