【问题标题】:Underscore's _.keys function only returning numermic indexes of keys not the value of keys in an arrayUnderscore 的 _.keys 函数只返回键的数字索引而不是数组中键的值
【发布时间】:2016-10-21 05:27:49
【问题描述】:

我正在尝试获取键的值来为我的下拉菜单设置自动完成值。用户将在“#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 代码可以正常工作。

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

【问题讨论】:

  • 您应该将常规对象传递给_.keys0, 1, 2 是数组键,数组的索引。
  • _.flatten(_.map(loanFields, _.keys)) 应该返回 ["BALANCE", "OPENDATE", "CLOSEDATE"]。如果代码 sn -p 难以阅读,也可以使用_.chain 方法:_.chain(loanFields).map(loanFields, _.keys).flatten().value()
  • Native js : loanFields.map(function(obj){ for(var k in obj) return k; }) (IE 9+) 或者你可以使用下划线_.map()
  • 原生js:loanFields.map(x => Object.keys(x)[0]);

标签: javascript jquery arrays object underscore.js


【解决方案1】:

我能够通过另一种方式解决这个问题。希望我的回答对其他人有所帮助。

我创建了一个对象数组。

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));}

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2019-01-19
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多