如何在Lodash中将函数从数组链接到对象

How to chain functions from array to object in Lodash

本文关键字:数组 链接 对象 函数 Lodash      更新时间:2023-09-26

我本来希望这能成功,但没有成功:

var myName = _(myArray)
    .find({ "ID": 5 })
    .get("Name");

基本上,我想在一个数组中找到一个元素,其中ID属性等于5,然后得到它的"Name"属性的值。

我错过了什么?

此处不需要使用.get().find()返回匹配的对象,因此要提取其Name属性,只需在该对象上引用.Name即可:

var myName = _(myArray).find({ "ID": 5 }).Name;

只有在.find()调用成功的情况下,这才会起作用。您可能想将.find()的结果存储在一个变量中,然后在返回Name属性之前检查它是否不是null

var match = _(myArray).find({ "ID": 5 }),
    myName;
if (match) {
    myName = match.Name;
}

下面,我编写了三个不同的调用,它们都将返回所需的数据。正如他们所说,在编程方面,剥猫皮的方法不止一种。你必须根据自己的需要选择最有效或最高效的。

下面使用_.result函数的后两个函数是根据lodash文档改编的。您可以使用result来替换_.get()

_.result(object, path, [defaultValue])

此方法类似于_.get,只是若解析的值是一个函数,则使用其父对象的此绑定来调用它,并返回其结果。

自变量

  • object(Object):要查询的对象
  • path(数组|字符串):要解析的属性的路径
  • [defaultValue](*):如果解析的值未定义,则返回的值

退货

  • (*):返回已解析的值

var myArray = [
  { ID : 0,  Name : 'Foo' },
  { ID : 1,  Name : 'Bar' },
  { ID : 5,  Name : 'Baz' },
  { ID : 10, Name : 'Oof' }
];
// Convienience function to print to the DOM. (Only for debugging)
function print() {
  document.body.innerHTML += '<p>' + [].join.call(arguments, ' ') + '</p>';
}
// Find item using chaining with `_.find()` and `_.get()`.
print(
  '<span class="lbl">Chain + Find + Get:</span>',
  _(myArray).chain().find({ 'ID' : 5 }).get('Name')
);
// Find item using a predicate (function).
print(
  '<span class="lbl">Find (Function Predicate) + Result:</span>',
  _.result(_.find(myArray, function(chr) {
    return chr.ID === 5;
  }), 'Name')
);
// Find item using the `_.matches()` callback shorthand.
print(
  '<span class="lbl">Find (Object Predicate) + Result:</span>',
  _.result(_.find(myArray, { 'ID' : 5 }), 'Name')
);
.lbl {
  font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>