首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS ES6如何根据自己的模板对数组进行排序?

JS ES6如何根据自己的模板对数组进行排序?
EN

Stack Overflow用户
提问于 2018-10-24 15:02:18
回答 3查看 1.1K关注 0票数 0

我有麻烦了。我得到了uniq值的数组(没有重复),但是长度总是不同的。例如,我得到了这个数组:

代码语言:javascript
复制
['asd', 'asa','wsz', 'xssa', 'asad', 'casde']

它必须排序如下:

代码语言:javascript
复制
['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd']

2)数组:

代码语言:javascript
复制
['asd', 'asa', 'xssa', 'asad', 'casde']

它必须排序如下:

代码语言:javascript
复制
['asa', 'xssa', 'casde', 'asad', 'asd']

3)阵列:

代码语言:javascript
复制
['asd', 'asa','wsz']

它必须排序如下:

代码语言:javascript
复制
['wsz', 'asa', 'asd',]

排序顺序应始终与第一个['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd']中的顺序相同。如果元素较小,则它们不会,但序列将保持不变。

我如何为我自己的值创建模板,г对它们进行搜索,而不管数组的大小(大小总是小于模板的大小)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-24 15:08:45

一个选项是创建一个map对象,它使用字符串作为键,使用序号作为值。使用sort()来使用临时对象对数组进行排序。

代码语言:javascript
复制
let order = ['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd'];
let temp = order.reduce((c, v, i) => Object.assign(c, {[v]: i}), {});

let arr = ['asd', 'asa', 'xssa', 'asad', 'casde'];

arr.sort((a, b) => temp[a] - temp[b]);

console.log(arr);

sort()需要循环遍历每个元素并比较每个元素。避免sort()的一个选择是对数组创建一个new Set。然后使用filter()检查order数组的每个元素。如果元素存在于Set对象上,则添加到新数组中。

代码语言:javascript
复制
let arr = ['asd', 'asa', 'xssa', 'asad', 'casde'];
let map = new Set(arr);

let order = ['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd'];

let newArr = order.filter(o => map.has(o));

console.log(newArr);

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 15:08:32

在排序函数中使用template.indexOf定位模板中数据中元素的位置。

代码语言:javascript
复制
var template = ['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd'];

var data1 = ['asd', 'asa','wsz', 'xssa', 'asad', 'casde'];
var data2 = ['asd', 'asa','wsz']; 

function sortFunc(a, b) {
  return template.indexOf(a) - template.indexOf(b);
}

data1.sort(sortFunc);
data2.sort(sortFunc);

console.log(data1);
console.log(data2);

票数 2
EN

Stack Overflow用户

发布于 2018-10-24 15:11:15

您可以使用回调使用sort()函数,其中条件将是原始数组的索引。

代码语言:javascript
复制
function sortMyArray(a, b) {
  let array = ['asd', 'asa','wsz', 'xssa', 'asad', 'casde'];
  if (array.indexOf(a) < array.indexOf(b)) {
    return -1;
  }
  return 0;
}

let myarray = ['wsz', 'asa', 'asd',];
myarray = myarray.sort(sortMyArray);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52972254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档