Underscore的_.keys函数只返回键的数字索引而不是数组中键的值

时间:2016-06-20 03:46:56

标签: javascript jquery arrays object underscore.js

我正在尝试获取密钥的值,以便为我的下拉菜单设置自动填充值。用户将在“#currentSelectedLevel”字段中输入“LOAN”,jQuery将使用loanFields中的键填充所有“.episysFieldName”字段。

if($("#currentSelectedLevel").val()=="LOAN"){                
    $(".levelFieldName").autocomplete('option', 'source', _.keys(loanFields));}


var loanFields = [

  {"BALANCE": "MONEY"},
  {"OPENDATE": "DATE"},
  {"CLOSEDATE": "DATE"}
];

当我发出警报时,我只获取值的索引。 [0,1,2]。我需要它返回“BALANCE”,“OPENDATE”,“CLOSEDATE”。

alert( _.keys(loanFields));

当我在数组中使用字符串时,我的jQuery代码工作正常。

注意:我开始使用对象/键值对的原因是因为将来我需要知道字段的类型以及可能的其他属性。我相信我的问题是如何在数组中构造对象。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我能够通过另一种方式解决这个问题。希望我的回答可以帮助别人。

我创建了一个对象数组。

var loanFields = [

  {name: "BALANCE", 
   type: "MONEY"
  },
  {name: "OPENDATE", 
   type: "DATE"
  },
  {name: "CLOSEDATE", 
   type: "DATE"
  }
];

然后使用_.propertyOf函数获取名称属性并将它们分配给数组并将其返回给jQuery,以指定为自动完成值。

function getFieldNamesFromArray(fieldNameArray){
  var fieldNames = [];

  // use underscore.js to get just name property value
  for (var i = 0; i < fieldNameArray.length; i++) {
      fieldNames.push(_.propertyOf(fieldNameArray[i])('name'));
  }
  return fieldNames;

}

以下内容将其分配给下拉列表。

if($("#currentSelectedLevel").val()=="LOAN"){                
              $(".levelFieldName").autocomplete('option', 'source', getFieldNamesFromArray(loanFields));}