繁体   English   中英

根据另一个数组中的值对数组进行排序

[英]Sort array based on values in another array

我有 2 arrays 如下。

数组 1

let array1 = [

  {
    name:1,
    options: {layer:mynode:Cat}
  },
  {
    name:randomName,
    options: {layer:mynode:Dog}
  },
  {
    name:randomName2,
    options: {layer:mynode:Lion}
  }

]

下一个数组

阵列 2

let array2 = ["Dog","Lion","Cat"]

我想根据 array2 中的数据顺序对 array1 进行排序。 我试过这样的事情,但它给了我一个未定义的结果

sortedArr = array2.map((object,key) => array1[((options.layers).split(':'))[1]]);

有人可以帮我弄这个吗?

 let array1 = [ { name: 1, options: { layer: "mynode:Cat" }, }, { name: 2, options: { layer: "mynode:Dog" }, }, { name: 3, options: { layer: "mynode:Lion" }, }, ]; let array2 = ["Dog", "Lion", "Cat"]; array1.sort((a, b) => { return array2.indexOf(a.options.layer.split(":")[1]) > array2.indexOf(b.options.layer.split(":")[1])? 1: -1; }); console.log(array1);

无论哪种方式,从属性option中获取所需的值,并从 object 中获取用于排序的两个项目的增量的数字顺序值。

 const getPart = string => string.slice(1, -1).split(':')[2], array1 = [{ name: 1, options: '{layer:mynode:Cat}' }, { name: 'randomName', options: '{layer:mynode:Dog}' }, { name: 'randomName2', options: '{layer:mynode:Lion}' }], array2 = ["Dog", "Lion", "Cat"], order = Object.fromEntries(array2.map((v, i) => [v, i + 1])); array1.sort((a, b) => order[getPart(a.options)] - order[getPart(b.options)]); console.log(array1);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

let array1 = [

  {
    name:'1',
    options: {layer:'Cat'}
  },
  {
    name:'randomName',
    options: {layer:'Dog'}
  },
  {
    name:'randomName2',
    options: {layer:'Lion'}
  }

]

let array2 = ["Dog","Lion","Cat"]
let sortedArr = []

array2.forEach(elem => sortedArr.push(array1[(array1.findIndex(elemArr1 => elemArr1.options.layer === elem))]))

console.log(sortedArr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM