Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用另一个对象对对象数组进行排序_Javascript_Arrays_Sorting - Fatal编程技术网

在javascript中使用另一个对象对对象数组进行排序

在javascript中使用另一个对象对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图通过与另一个对象进行比较来对一组对象进行排序。最后一个数组需要在顶部显示选定的对象,并在其下方显示其余对象 尽管如此,我还是得到了期望的输出。只是想知道我是否可以进一步优化它 let myArray = [ { Name: 'Name 1', id: 1111 }, { Name: 'Name 2', id: 2222 }, { Name: 'Name 3', id: 3333 }, { Name: 'Name 4', id: 4444 }, { N

我试图通过与另一个对象进行比较来对一组对象进行排序。最后一个数组需要在顶部显示
选定的
对象,并在其下方显示其余对象

尽管如此,我还是得到了期望的输出。只是想知道我是否可以进一步优化它

let myArray = [
    { Name: 'Name 1', id: 1111 },
    { Name: 'Name 2', id: 2222 },
    { Name: 'Name 3', id: 3333 },
    { Name: 'Name 4', id: 4444 },
    { Name: 'Name 5', id: 5555 },
    { Name: 'Name 6', id: 6666 }]

let selected = { 1111: 'some value 1', 4444: 'some value 2' }

sortBySelected = (data) => {
    var keys = Object.keys(selected);
    return data.filter((obj) => {
        if (keys.find((key) => {
            return key === String(obj.id);
        })) {
            return true;
        }
        return false;
    });
}

sortByNotSelected = (data) => {
    var keys = Object.keys(selected);
    return data.filter((obj) => {
        if (keys.find((key) => {
            return key === String(obj.id);
        })) {
            return false;
        }
        return true;
    });
}

sort = (data) => {
    data1 = sortBySelected(data);
    data2 = sortByNotSelected(data);
    return data1.concat(data2);
}


console.log(sort(myArray));
用于排序

myArray.sort(function(a, b) {
  var aSelected = selected[a.id] !== undefined;
  var bSelected = selected[b.id] !== undefined;
  if (aSelected && bSelected === false) {
    // a goes before b
    return -1;
  } else if (aSelected === false && bSelected) {
    // a goes after b
    return 1;
  } else {
    // a and b are considered equal...
    // let the sort function decide the actual position
    return 0;
  }
});

您可以在运算符中使用检查的增量

var数组=[{Name:'Name 1',id:1111},{Name:'Name 2',id:2222},{Name:'Name 3',id:3333},{Name:'Name 4',id:4444},{Name:'Name 5',id:5555},{Name:'Name 6',id:6666},
所选={1111:'某些值1',4444:'某些值2'};
array.sort((a,b)=>(所选的b.id)-(所选的a.id));
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
调用sortBySelected和sortByNotSelected会使javascript在数组上循环两次,使用array.sort更优雅,但成本似乎并不低

我制作了一个stackblitz示例来进行一些测试:

sort函数是最初建议的函数,sort2是循环1次而不是2次的函数,sort3使用Array.sort

结果是一样的,sort2似乎更有效(链接到下面的结果图像):


工作代码:坏代码:所选项目和未选项目是否也需要相互排序?顶部项目的需要顺序是什么?对象的顺序是按值排序的整数。你总是有最聪明的答案