我是学生,最近开始使用Underscore和/或Lodash,而英语是我的第二语言,我有时很难理解这些Underscore / Lodash功能究竟在做什么。
我特别感兴趣的是如何解决我现在正在处理的这种情况...假设我有一个对象数组,而这些对象又包含一个文档数组;如果我想确定其中一个文档是否属于某种类型,如果是,则返回与该文档关联的对象。所以在我的情况下,我正在处理一组Invoice对象,而这些对象又有一个文档数组,为了解决这个问题,我使用了以下JavaScript代码:
let invoice = null;
for(let i = 0; i < $scope.invoices.length; i++){
let docs = $scope.invoices[i].documents;
if(docs && docs.length){
for(let j = 0; j < docs.length; j++) {
if(docs[j].type === 'document_xxxx'){
invoice = $scope.invoices[i];
break;
}
}
}
}
现在,我想了解完成同样事情的最简单方法,但是使用Underscore / Lodash。我怎样才能做到这一点?
答案 0 :(得分:2)
将Array#find与Array#some(或他们的lodash等价物 - .find 和 .some)一起使用。
在Array#find的每次迭代中,使用Array#some迭代发票文档,如果其中一个具有正确的类型,则Array#some返回true
,而Array#find返回发票。< / p>
const invoices = [{ id: 1, documents: [{ type: 'document_mmmm' }] }, { id: 2, documents: [{ type: 'document_xxx1' }, { type: 'document_xxxx' }, { type: 'document_xx3x' }] }, { id: 3, documents: [{ type: 'document_zzz' }] }];
const result = invoices.find(({ documents = [] }) =>
documents.some((d) => d.type === 'document_xxxx'));
console.log(result);
&#13;
使用下划线:
const invoices = [{ id: 1, documents: [{ type: 'document_mmmm' }] }, { id: 2, documents: [{ type: 'document_xxx1' }, { type: 'document_xxxx' }, { type: 'document_xx3x' }] }, { id: 3, documents: [{ type: 'document_zzz' }] }];
const result = _.find(invoices, ({ documents = [] }) =>
_.some(documents, (d) => d.type === 'document_xxxx'));
console.log(result);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;