簡體   English   中英

如何檢查數組是否相等?

[英]How to check that an array is reciprocally equal?

我有一個包含兩個變量,索引和類型的項目數組,需要按這兩個變量的完全匹配對這些項目進行分組。

[{ 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 }; })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM