首页 > 解决方案 > 根据JS中的另一个数组对Array的一部分进行排序

问题描述

我见过类似的问题。但我正在尝试根据另一个数组的值对数组进行部分排序。

这是我正在寻找的内容:

let array = [
  {
    name: "Foo",
    values: [a, b, c, d]
  },
  {
    name: "Bar",
    values: [x, y]
  },
  {
    name: "FooBar",
    values: [k, l, m]
  },
  {
    name: "BarBar",
    values: [m, n]
  }
]

let sort = ["BarBar", "Bar"]

所需的输出是:

let desiredOutput = [
  {
    name: "BarBar",
    values: [m, n]
  },
  {
    name: "Bar",
    values: [x, y]
  },
  {
    name: "Foo",
    values: [a, b, c, d]
  },
  {
    name: "FooBar",
    values: [k, l, m]
  }
]

数组仅基于两个值进行排序,并且每个其他元素都遵循相同的顺序。

我想知道是否有可能实现这一目标。

标签: javascriptarrays

解决方案


如果元素存在于数组中,您可以使用sort方法首先按条件排序,如果元素存在,也可以使用索引。

let array = [{name: "Foo",},{name: "Bar",},{name: "FooBar",},{name: "BarBar",}]
let sort = ["BarBar", "Bar"]

array.sort((a, b) => {
  let iA = sort.indexOf(a.name);
  let iB = sort.indexOf(b.name);
  return ((iB != -1) - (iA != -1)) || iA - iB
})

console.log(array)


推荐阅读