所以我有一个有趣的问题我不知道如何遵循,我需要使用lodash来搜索对象中的两个数组,看看x是否已经存在,让我们看看控制台输出:
我感兴趣的有两个键:questChains
和singleQuests
,我想用lodash编写两个单独的函数来说:在{{1}的对象数组中找到我的id x } questChains
等于x。
第二个函数会说:在questChainID
singleQuests
等于y
因此,如果我们举一个示例,您可以看到questTitle
是questChainId
,所以如果我将1传递给所述函数,我会得到1
,我不会实际上关心自己的对象,否则我会变得虚假。
同样适用于true
,如果我传入singleQuests
(不区分大小写),我会回来hello
,因为有true
的'{1}} ”。我再一次不关心回来的物体。
我写这个的方式是这样的:
questTitle
这仅适用于任务链ID比较。这似乎超级凌乱,为什么?因为我正在筑巢lodash找到,我也在筑巢。它有点难以阅读。
这是唯一的方法吗?还是有更好的方法?
答案 0 :(得分:2)
是的,它可以更简单地表达出来。
尝试这样的事情:
var exampleArray = [{
questChains: [{
questChainId: 1,
name: 'foo'
}, {
questChainId: 2,
name: 'bar'
}],
singleQuests: [{
questTitle: 'hello world'
}]
}, {
questChains: [{
questChainId: 77,
name: 'kappa'
}]
}];
var result = _.chain(exampleArray)
.pluck('questChains')
.flatten()
.findWhere({ questChainId: 2 })
.value();
console.log('result', result);
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>
使用chain
和value
是可选的。他们只是让你更简洁地将多种lodash方法链接在一起。
pluck
从数组中的每个对象获取属性,并返回这些属性的新数组。
flatten
采用嵌套数组结构并将其展平为平面数组结构。
findWhere
将返回与提供的属性名称/值匹配的第一个元素。
结合所有这些结果,我们从questChain
获取所有exampleArray
数组,将它们展平为单个数组,可以更容易地迭代,然后搜索所需的值。< / p>
不区分大小写的匹配将更具挑战性。您需要使用接受匹配函数(即findWhere
)的方法替换find
或提前清理您的输入。无论哪种方式,您都需要拨打toLower
,toUpper
或姓名上的某些变体来标准化您的搜索。