在javascript中更改对象数组顺序的最佳方法是什么

在javascript中更改对象数组顺序的最佳方法是什么,javascript,arrays,Javascript,Arrays,下面是重新排列对象数组的最简单方法 我想根据组值(自定义订单)重新订购 如果我传入带有组值的参数,则与组值对应的特定对象应该出现在顶部 差不多 function ("Shop",originalArray){ return newArray; } 应返回: [ { groupValue: 'Shop', doclist: { numFound: 9, start: 0, maxScore: 1.2556685, docs: [Object] } }, { groupV

下面是重新排列对象数组的最简单方法

我想根据组值(自定义订单)重新订购

如果我传入带有组值的参数,则与组值对应的特定对象应该出现在顶部

差不多

function ("Shop",originalArray){
 return newArray;
}
应返回:

    [ { groupValue: 'Shop',
        doclist: { numFound: 9, start: 0, maxScore: 1.2556685, docs: [Object] } },
{ groupValue: 'Corp',
        doclist: { numFound: 259, start: 0, maxScore: 1.1320078, docs: [Object] } },
      { groupValue: 'Phone',
        doclist: { numFound: 7975, start: 0, maxScore: 1.2560269, docs: [Object] } }]

您可以将自定义函数传递给
Array.prototype.sort

function sortBy(arr, val, prop) {
    return arr.sort(function(a,b) {
        if (b[prop] == val) return 1;
        return 0;
    });
 }

console.log(sortBy(arr, "Shop", "groupValue"))
由于其余元素的顺序对您来说很重要(应保持不变),请执行以下操作:

function sortBy(arr, val, prop) {
  var top = [];
  var rest = [];
    /* see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for...of 
    for "for of" loops, you might want to use a forEach() loop as "for of" isn't supported in many browsers as of now
    */
  for (var el of arr) {  
    if (el[prop] == val) {
        top.push(el)
    } else {
        rest.push(el);
    }
  }
  return top.concat(rest);
}

 console.log(sortBy(arr, "Shop", "groupValue"))
可以使用以下方法移动阵列中的元素:

var arr=[{groupValue:'Corp',
文档列表:{numFound:259,start:0,maxScore:1.1320078},
{groupValue:'电话',
文档列表:{numFound:7975,start:0,maxScore:1.2560269},
{groupValue:'Shop',
文档列表:{numFound:9,start:0,maxScore:1.2556685}}];
功能移动(选项,原始阵列){
var newArray=originalArray.slice();
拼接(0,0,newArray.filter(item=>item.groupValue==option)[0]);
返回新数组;
}

控制台日志(移动(“车间”,arr))这应该可以工作,提供一个新数组,并且应该只检查一次原始数组

var数据=[{
集团价值:“公司”,
文件清单:{
numFound:259,
起点:0,
maxScore:1.1320078,
文档:[对象]
}
}, {
groupValue:'电话',
文件清单:{
numFound:7975,
起点:0,
最高分数:1.2560269,
文档:[对象]
}
}, {
groupValue:'商店',
文件清单:{
numFound:9,
起点:0,
最高分数:1.2556685,
文档:[对象]
}
}];
函数goFirst(d,daFirst){
var r=[];
d、 forEach((e)=>{
如果(e['groupValue']==daFirst)
r、 取消移位(e);
其他的
r、 推(e);
})
返回r;
}
log(goFirst(数据“Shop”)您可以使用“排序”功能根据值将项目放在第一位

var originalArray=[{
集团价值:“公司”,
文件清单:{
numFound:259,
起点:0,
maxScore:1.1320078,
文档:[对象]
}
},
{
groupValue:'电话',
文件清单:{
numFound:7975,
起点:0,
最高分数:1.2560269,
文档:[对象]
}
},
{
groupValue:'商店',
文件清单:{
numFound:9,
起点:0,
最高分数:1.2556685,
文档:[对象]
}
}
]
var重新排序=函数(属性,原始数组){
var newArray=originalArray.slice()//克隆数组
newArray.sort(函数(a){返回a.groupValue!==attr?1:-1})//放在第一位
返回新数组;
}
//groupValue==先到店

console.log(reorder(“Shop”,originalArray))
在这种情况下,您只想将对象移动到索引0处的顶层?其余元素的顺序重要吗?是,我只需要将具有组值的特定对象移到顶部,其余的保持不变。这可能会产生重新排列数组中所有其他元素的副作用。MDN说:“排序不一定是稳定的”。在这种情况下,输入数组被修改,正如我所理解的,OP要求一个
newArray
function sortBy(arr, val, prop) {
  var top = [];
  var rest = [];
    /* see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for...of 
    for "for of" loops, you might want to use a forEach() loop as "for of" isn't supported in many browsers as of now
    */
  for (var el of arr) {  
    if (el[prop] == val) {
        top.push(el)
    } else {
        rest.push(el);
    }
  }
  return top.concat(rest);
}

 console.log(sortBy(arr, "Shop", "groupValue"))