基于多个 predicate 搜索javascript对象数组(或)-lodash

zed5wv10  于 2021-09-23  发布在  Java
关注(0)|答案(3)|浏览(204)

我有一个要搜索以找到匹配结果的对象数组。目前我正在使用lodash,我的查询如下:

let toPush = _.findIndex(result, {itemNumber: queryArray[j][0]})

我想编辑 predicate 以搜索多个属性,但使用or predicate ,因此看起来像:

let toPush = _.findIndex(result, {itemNumber: queryArray[j][0] || listings.urlId : queryArray[j][0]})

如何将or运算符与lodash一起使用?
我不一定需要使用lodash vs vanilla js,也不需要使用索引,它可以返回整个对象。
编辑
这就是我最终的结果:

let toPush = _.findIndex(result, {listings: [{urlId: queryArray[j][0]}]}) > -1
    ? _.findIndex(result, {listings: [{urlId: queryArray[j][0]}]})
    :_.findIndex(result, {itemNumber:queryArray[j][0]}) > -1
        ? _.findIndex(result, {itemNumber:queryArray[j][0]})
        : _.findIndex(result, {productIdentifiers: [{productIdentifier: queryArray[j][0]}]}) > -1
            ? _.findIndex(result, {productIdentifiers: [{productIdentifier: queryArray[j][0]}]})
            : -1

如果有人能想出更好的办法,我将不胜感激。根据到目前为止的答案,我还没能让其他任何东西起作用。
谢谢

pw9qyyiw

pw9qyyiw1#

您可以将comparator函数作为第二个参数传递,在该参数中可以放置您想要的任何逻辑:

let toPush = _.findIndex(result, function (item) {
  // put logic in here, return true if the item matches or false otherwise
  return (item.itemNumber === queryArray[j][0] || item.listings.some(listing => listing.urlId === queryArray[j][0]));
});

这实际上与vanilla js完全相同:

let toPush = result.findIndex(function (item) {
  // put logic in here, return true if the item matches or false otherwise
  return (item.itemNumber === queryArray[j][0] || item.listings.some(listing => listing.urlId === queryArray[j][0]));
});
pengsaosao

pengsaosao2#

我将使用的模式的可运行代码段:

const result = [1,2,3,4,5,6,7,8,9,0]

console.log(result.findIndex((x) => [3,5].some((y) => x == y)))

当然,你需要更换 [3,5] 使用您希望检查的值。

kyks70gy

kyks70gy3#

负荷灰法

let users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];
let result = _.find(users, function(u) {
  return u.age <= 40 && u.active; 
});
console.log(result);

n、 请注意 find 如果未找到任何内容,Function将返回undefined
es16方法

let users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];

let result = users.find(function(u){
  return u.age<=40 && u.active && u.user.includes('r');
});

console.log(result);

n、 b.像lodash一样 find 作用 ES find 如果未找到任何内容,也将返回undefined。

相关问题