我有麻烦了。我得到了uniq值的数组(没有重复),但是长度总是不同的。例如,我得到了这个数组:
['asd', 'asa','wsz', 'xssa', 'asad', 'casde']它必须排序如下:
['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd']2)数组:
['asd', 'asa', 'xssa', 'asad', 'casde']它必须排序如下:
['asa', 'xssa', 'casde', 'asad', 'asd']3)阵列:
['asd', 'asa','wsz']它必须排序如下:
['wsz', 'asa', 'asd',]排序顺序应始终与第一个['wsz', 'asa', 'xssa', 'casde', 'asad', 'asd']中的顺序相同。如果元素较小,则它们不会,但序列将保持不变。
我如何为我自己的值创建模板,г对它们进行搜索,而不管数组的大小(大小总是小于模板的大小)?
发布于 2018-10-24 15:08:45
一个选项是创建一个map对象,它使用字符串作为键,使用序号作为值。使用sort()来使用临时对象对数组进行排序。
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对象上,则添加到新数组中。
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);
发布于 2018-10-24 15:08:32
在排序函数中使用template.indexOf定位模板中数据中元素的位置。
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);
发布于 2018-10-24 15:11:15
您可以使用回调使用sort()函数,其中条件将是原始数组的索引。
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);https://stackoverflow.com/questions/52972254
复制相似问题