数组中的相同值必须一起定位

时间:2017-03-30 14:01:18

标签: javascript arrays

var array1 = ["ddd","aaa","eee","aaa","fff","bbb","ggg","aaa","ccc","fff"]

我必须以相同的值必须放在一起的方式安排它

输出数组应该是

["ddd","aaa","aaa","aaa","eee","fff","fff","bbb","ggg","ccc"]

如何为这一个编写逻辑?

4 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

使用{/ 1}}方法对此数组进行排序

&#13;
&#13;
sort()
&#13;
&#13;
&#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)

您可以创建一个对象来存储值和索引,然后使用该对象创建新数组。

&#13;
&#13;
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;
&#13;
&#13;