var array1 = ["ddd","aaa","eee","aaa","fff","bbb","ggg","aaa","ccc","fff"]
我必须以相同的值必须放在一起的方式安排它
输出数组应该是
["ddd","aaa","aaa","aaa","eee","fff","fff","bbb","ggg","ccc"]
如何为这一个编写逻辑?
答案 0 :(得分:1)
您可以迭代数组并检查位置,如果不是与实际元素相同,则将值拼接到较早的位置。
var array = ["ddd","aaa","eee","aaa","fff","bbb","ggg","aaa","ccc","fff"],
i = 0, p;
while (i < array.length) {
p = array.indexOf(array[i]);
if (p !== i) {
array.splice(p, 0, array.splice(i, 1)[0]);
}
i++;
}
console.log(array);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
使用{/ 1}}方法对此数组进行排序
sort()
&#13;
答案 2 :(得分:0)
实际上对你来说,请求.sort()
可能是一种矫枉过正。您可以通过以下方式执行此操作;
function quasiSort(a){
var h = a.reduce((h,e) => h[e] ? (h[e].push(e), h)
: (h[e] = [e], h), {});
return Object.keys(h).reduce((r,k) => r.concat(h[k]),[]);
}
var array1 = ["ddd","aaa","eee","aaa","fff","bbb","ggg","aaa","ccc","fff"];
console.log(quasiSort(array1));
答案 3 :(得分:0)
您可以创建一个对象来存储值和索引,然后使用该对象创建新数组。
var array1 = ["ddd","aaa","eee","aaa","fff","bbb","ggg","aaa","ccc","fff"],
obj = {}, i = 0
array1.forEach(function(e) {
if(!obj[e]) obj[e] = {index: i++, values: []}
obj[e].values.push(e)
})
var result = [].concat(...Object.keys(obj).reduce((r, e) => (r[obj[e].index] = obj[e].values, r), []))
console.log(result)
&#13;