根据JS中的另一个数组对数组的一部分进行排序

时间:2018-12-12 17:47:31

标签: javascript arrays

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

这是我想要的:

InstallExecuteSequence

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"]

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

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

2 个答案:

答案 0 :(得分:3)

如果元素存在于数组中,则可以使用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)

答案 1 :(得分:2)

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"]

const sortWithAnotherArray=(arr,sortBy)=>{
  let begin =sortBy.map(e=>arr.filter(v=>v.name===e))
  let end = arr.filter(e=>sortBy.includes(e.name))
  return begin +end
}
console.log(sortWithAnotherArray(array,sort))