javascript - 如何检查数组是否相等?

标签 javascript node.js lodash

我有一个包含两个变量,索引和类型的项目数组,需要按这两个变量的完全匹配对这些项目进行分组。

[{ types: ['a', 'b'], indexes: ['i0', 'i1']}, { types: ['c', 'd'], indexes: ['i2', 'i3']}, ...]


目前,代码创建了一个包含项目中唯一的索引和类型对的数组,然后通过迭代遍历并将它们添加到临时数组中将它们组合在一起。我相信这是通过lodash完成的,然后进行过滤以生成对。

问题是,它当前仅检查项目是否包含唯一对中存在的所有类型和索引。因此,如果有一对类型为:a,b,c;它会匹配包含这三者的任意组合的任何内容,而不完全是这三者的组合。

我添加了一个互惠的.every check来验证相反的方式,但是我不确定是否有更有效的方法来执行此操作。

最终结果应该是一个项目数组,其中仅包含在两个方向上都完全匹配类型和索引的其他项目。

编辑:

因此,现有代码为:

const distinctIndexTypes =
  _.uniqWith(
    Object.values(items).map(item => { indexes: item.indexes, types: item.types }),
    _.isEqual,
  );

const queries = [];
distinctIndexTypes.forEach(indexType => {
  const aggs = [];
  Object.values(items).forEach(item => {
    if (
      indexType.indexes.every(index => item.indexes.includes(index)) &&
      item.indexes.every(index => indexType.indexes.includes(index)) &&
      item.types.every(type => indexType.types.includes(type)) &&
      indexType.types.every(type => item.types.includes(type))
    ) {
      aggs.push(item);
    }
  });

  if (aggs.length > 0) {
    queries.push({
      aggs,
    });
  }
});


目的是获得一个包含类型和索引的查询数组,这些数组和类型恰好等于将查询数量从每一项减少到每组不同的查询。

最佳答案

如何按格式化键分组?

var groups = _.groupBy(items, item => _.sortBy(item.types) + ";" + _.sortBy(item.indexes))
var queries2 = _.map(groups, g => { return { aggs: g }; })

关于javascript - 如何检查数组是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817135/

相关文章:

javascript - 如何使用 lodash 从数组中获取多个键值?

javascript - 如何从 Paper.js 的图层中销毁特定(而不是删除)对象/路径/子组

node.js - Nodejs 和 mongodb 刷新错误?

node.js - 云功能和 Firestore : Iterate over document. 数据

javascript - 通过扩展对象文字来实例化 Typescript 变量

javascript - 在 lodash 中使用双 groupBy

javascript - 如何获取在javascript中为一个类创建的对象总数?

javascript - addClass 在选中时更改 html 文本

javascript - 如果 JS 中的函数是一等的,那么是什么允许它们在定义之前被调用?

node.js - 异步等待与 nodejs 7