首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在lodash中使用数组过滤条件来处理对象?

如何在lodash中使用数组过滤条件来处理对象?
EN

Stack Overflow用户
提问于 2019-05-31 20:00:19
回答 5查看 89关注 0票数 1

如何在lodash中过滤另一个对象的年龄?但是criteria对象是数组..

代码语言:javascript
复制
var form = { type: ['xyz', 'abc'], name: 'pre-1' }

var items = [
 { type: 'xyz', name: 'pre-1' },
 { type: 'abc', name: 'pre-1' }, 
 { type: 'xyz', name: 'pre-2' }, 
]

const results = lodash.filter(items, form);

results应为xyzabc

代码语言:javascript
复制
results = [{ type: 'xyz', name: 'pre-1' }, { type: 'abc', name: 'pre-1' }]

这是不是我可以用filter方法做的事情?

EN

回答 5

Stack Overflow用户

发布于 2019-05-31 20:12:34

好的,您可以使用自定义过滤方法与lodash一起使用。请在下面进行尝试:

代码语言:javascript
复制
var form = { type: ['xyz', 'abc'], name: 'pre-1' }

var items = [
 { type: 'xyz', name: 'pre-1' },
 { type: 'abc', name: 'pre-1' }, 
 { type: 'xyz', name: 'pre-2' }, 
]

let filtered = _.filter(items, (item)=>{
    return form.type.indexOf(item.type) >= 0 && form.name == item.name
});

console.log(filtered);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2019-05-31 20:17:08

代码语言:javascript
复制
var form = { type: ['xyz', 'abc'], name: 'pre-1' }

var items = [
 { type: 'xyz', name: 'pre-1' },
 { type: 'abc', name: 'pre-1' }, 
 { type: 'xyz', name: 'pre-2' }, 
]

var item = _.filter(items, i => {
 return form.type.indexOf(i.type) > -1 && form.name === i.name
});

console.log(item)
票数 0
EN

Stack Overflow用户

发布于 2019-05-31 20:33:37

检查是否为form.name === item.name,如果是,请使用Array.includes()检查item.type是否出现在form.type中。

注意:我已经使用了普通的JS过滤器并包含了方法,但是您可以将它们替换为lodash的_.filter()_.includes()

代码语言:javascript
复制
const form = { type: ['xyz', 'abc'], name: 'pre-1' }

const items = [{"type":"xyz","name":"pre-1"},{"type":"abc","name":"pre-1"},{"type":"xyz","name":"pre-2"}]

const result = items.filter(item =>
  form.name === item.name && form.type.includes(item.type)
)

console.log(result)

lodash的另一个选项是使用_.intersectionWith(),并在comperator函数中检查项的名称是否与表单的名称相同,类型是否存在于类型中。

代码语言:javascript
复制
const form = { type: ['xyz', 'abc'], name: 'pre-1' }

const items = [{"type":"xyz","name":"pre-1"},{"type":"abc","name":"pre-1"},{"type":"xyz","name":"pre-2"}]

const result = _.intersectionWith(items, form.type, (item, type) =>
  form.name === item.name && item.type === type
)

console.log(result)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56394721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档