gpt4 book ai didi

javascript - Underscore/Lodash 对比 From Scratch

转载 作者:行者123 更新时间:2023-11-29 20:59:21 25 4
gpt4 key购买 nike

我是一名学生,最近开始使用 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。我怎样才能做到这一点?

最佳答案

使用Array#findArray#some (或它们的 lodash 等价物 - .find .some )。

在 Array#find 的每次迭代中,发票文档使用 Array#some 进行迭代,如果其中一个具有正确的类型,Array#some 返回 true,而 Array#find 返回发票。

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

使用下划线:

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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

关于javascript - Underscore/Lodash 对比 From Scratch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com