基于多个条件对多维数组进行排序

尼古拉斯·黑兹尔(Nicholas Hazel)

我试图找出一种有效的方法,可以根据另一个数组的多少个值对多维数组进行排序。

给定以下数组: [1,2,3,4,5,6,7,8,9,10]

我正在尝试根据包含的这些值的数量对另一个数组进行排序。

[
  [1,3,5,7,9,22],
  [1,200,300,400,500,600],
  [1,2,3,4,5,6]
]

因此,我尝试获取的代码将返回:

[
  [1,2,3,4,5,6],
  [1,3,5,7,9,22],
  [1,200,300,400,500,600]
]

我认为我正在做的事情效率很低,可以用我不知道的方法更好或更简洁地编写?

https://jsfiddle.net/gb3fsLdv/

const compareNums = [1,2,3,4,5,6,7,8,9,10];
let ourData = [
  [1,2,3,100,200,300],
  [100,200,300,400,500,600],
  [1,2,3,5,6,9]
];

function sortArr(compare, data){
  let indexMatches = [];
  data.map(arr => {
    let count = 0;
    compare.map(num => {
      if(arr.includes(num)){ 
        count++ 
        }
    })
    indexMatches.push(count);
  })
  // So now I have indexMatches with a count of how many hits each array has in the correct index order as the original data
  // And I can use data to sort them based on these values...
  // Little stuck how to relate the two so the same sorting happens to both arrays
}

sortArr(compareNums, ourData);
马埃里·阿里(Maheer Ali)

首先将给定数组转换为set。然后用于filter()获取包含在其他数组中的元素的数量

const data = [
  [1,3,5,7,9,22],
  [1,200,300,400,500,600],
  [1,2,3,4,5,6]
]

let arr = [1,2,3,4,5,6,7,8,9,10];

function getCount(arr, set){
  return arr.filter(x => set.has(x)).length
}
function sortOnCount(data, arr){
  let set = new Set(arr);
  return data.slice(0).sort((a, b) => getCount(b, set) - getCount(a, set))
}

console.log(sortOnCount(data, arr))

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章