我希望这项工作,但它没有:
var myName = _(myArray)
.find({ "ID": 5 })
.get("Name");
基本上我想在数组中找到一个元素,其中ID属性等于5,然后获得该属性的“Name”属性值。
我错过了什么?
答案 0 :(得分:1)
您不需要在此处使用.get()
。 .find()
返回匹配的对象,因此要提取其Name
属性,您只需在该对象上引用.Name
:
var myName = _(myArray).find({ "ID": 5 }).Name;
这仅在.find()
调用成功时才有效。您可能希望将.find()
的结果存储在变量中,然后在返回null
属性之前检查是否不是Name
:
var match = _(myArray).find({ "ID": 5 }),
myName;
if (match) {
myName = match.Name;
}
答案 1 :(得分:0)
下面,我写了三个不同的调用,它们都将返回所需的数据。正如他们所说,在编程方面,有一种方法可以让猫皮肤化。您必须根据自己的需要选择最有效或最有效的方式。
下面的后两个函数(使用_.result
函数)已经从lodash文档中进行了改编。您可以使用结果代替_.get()
。
_.result(object, path, [defaultValue])
此方法与
_.get
类似,不同之处在于如果已解析的值是一个函数,则使用其父对象的此绑定调用它,并返回其结果。参数
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>