根據最佳匹配另一個數組對對像數組進行排序

凱貝爾

我有一個字符串數組,可以將其視為模板/參考:

// Template
let template = ['A', 'B', 'C'];

我還有一個包含一些數組字符串的對像數組:

// Source (to be sorted)
let source = [
   { items: ['B', 'D', 'E'] },
   { items: ['E', 'L', 'Y'] },
   { items: ['G', 'B', 'A'] },
   { items: ['C', 'B', 'A'] }
];

我現在需要找到一種通過匹配數組(從最好到最壞)來對數組items中的進行排序的方法中字符串的順序無關緊要。sourcetemplateitems

根據我上面的示例,排序後的結果如下所示:

// Result after sorting
let sorted = [
   { items: ['C', 'B', 'A'] }, // 3 matches (A, B, C)
   { items: ['G', 'B', 'A'] }, // 2 matches (A, B)
   { items: ['B', 'D', 'E'] }, // 1 match (B)
   { items: ['E', 'L', 'Y'] } // no match
];

使用 JavaScript 方法 .sort() 和 .localCompare() 我可以根據字符串對數組進行排序,但我找不到按給定數組“模板”排序的方法。

如果有人知道如何做到這一點,我會非常高興?先感謝您!

羅比·科內利森

您可以將邏輯基於Set包含來自template和 的不同元素的的大小items越小Set,越常見的項目:

const template = ['A', 'B', 'C'];

const source = [
   { items: ['B', 'D', 'E'] },
   { items: ['E', 'L', 'Y'] },
   { items: ['G', 'B', 'A'] },
   { items: ['C', 'B', 'A'] }
];

const target = source
  .map(({items}) => ({items, size: new Set([...items, ...template]).size}))
  .sort((a, b) => a.size - b.size);

console.log(target);

如果您沒有處理數組中的不同值,這可能更合適:

const template = ['A', 'B', 'C'];

const source = [
   { items: ['B', 'D', 'E'] },
   { items: ['E', 'L', 'Y'] },
   { items: ['G', 'B', 'A'] },
   { items: ['C', 'B', 'A'] }
];

const target = source
  .map(({items}) => ({
    items,
    size: items.reduce((a, v) => a + template.includes(v), 0)
  }))
  .sort((a, b) => b.size - a.size);

console.log(target);

這可以再次通過將 轉換template為 a來進一步優化Set

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根據兩個對像數組之間的比較創建新數組

Angular/RXJS,如何根據特定字符串值對 Observable 對像數組進行排序?

在嵌套對像數組中按屬性值對對像數組進行排序

根據大小對數組javascript進行排序

如何根據數組成員對集合進行排序

根據各個行對 3D 數組中的 2D 數組列進行單獨排序

如何根據特定函數對數組進行分組?

將對像數組轉換為另一個對像數組

如何根據Vuejs中的Id對特定數組位置進行排序?

任何人都可以建議一種通過對象鍵對對像數組進行分組的方法,然後根據 JavaScript 中的分組創建一個新的對像數組嗎?

是否可以總結對像數組的屬性並根據另一個屬性對其進行過濾?

PHP中根據兩個條件對多個關聯數組進行分組和排序

如何根據屬性對對像數組進行排序

按另一個對像數組對對像數組進行排序

如何對帖子對像數組進行排序?

同時對兩個數組進行排序

根據父級別和嵌套級別對嵌套對像數組進行排序

基於不同數據集對數組進行排序的最佳方法?

如何根據javascript中的第一個元素對多個嵌套數組的第二個元素進行分組?

如何根據對象的值將對像數組拆分為另一個數組?

根據數組對像數據創建一個新數組

如何使用單個數組對兩個或多個數組進行排序?

對具有最大特定鍵值總數的對像數組進行排序

如何根據基於不同數組的具有 2 個屬性的對像對數組進行排序

如何過濾對像數組並根據另一個數組過濾掉值?過濾應該基於鍵而不是值

如何在按另一個鍵排序之前按鍵對 PHP 數組進行分組?

根據第二行對二維數組進行排序

根據值在另一個字符串數組中的位置對對像數組進行排序

如何按多個日期字段對對像數組進行排序?