2017-01-10 62 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