Javascript 根据引用数组对数组重新排序 const id=[“第一”、“第二”、“第三”、“第四”、“第五”、“第六”]; 常数项=[ {id:“第三”,值:“…”}, {id:“第五”,值:“…”}, {id:“第一”,值:“…”}, {id:“第四”,值:“…”} ];

Javascript 根据引用数组对数组重新排序 const id=[“第一”、“第二”、“第三”、“第四”、“第五”、“第六”]; 常数项=[ {id:“第三”,值:“…”}, {id:“第五”,值:“…”}, {id:“第一”,值:“…”}, {id:“第四”,值:“…”} ];,javascript,arrays,Javascript,Arrays,如您所见,订购方式不同,缺少ID为second和sixth的项目 Items中的项目必须与ids 必须有null而不是缺少的项目(second和sixth) 最终结果如下所示: const项=[ {id:“第一”,值:“…”}, 空,//{ 返回项.id==id; }); //缺少,请改为插入null 如果(匹配===未定义){ 返回结果[i]=null; } //已匹配,请插入到正确的索引 返回结果[i]=匹配; }); 控制台。时间结束(“重新排序”); console.log('最终

如您所见,订购方式不同,缺少ID为
second
sixth
的项目

  • Items
    中的项目必须与
    ids
  • 必须有
    null
    而不是缺少的项目(
    second
    sixth

最终结果如下所示:

const项=[
{id:“第一”,值:“…”},
空,//{
返回项.id==id;
});
//缺少,请改为插入null
如果(匹配===未定义){
返回结果[i]=null;
}
//已匹配,请插入到正确的索引
返回结果[i]=匹配;
});
控制台。时间结束(“重新排序”);
console.log('最终结果:',结果);
}
//生成巨大的随机数组([ID],[items])
//*随机项目缺失
//*项目被随机洗牌
函数生成器阵列(计数){
设ids=[];
设项目=[];
设itemsIndex=0;
for(设i=0;i
您可以使用
map()
创建新数组

const id=[“第一”、“第二”、“第三”、“第四”、“第五”、“第六”];
常数项=[
{id:“第三”,值:“…”},
{id:“第五”,值:“…”},
{id:“第一”,值:“…”},
{id:“第四”,值:“…”}
];
var result=ids.map(函数(e){
var obj=items.find(a=>a.id==e);
返回obj?obj:空
})
console.log(结果)
您可以使用

let result = Array(ids.length).fill(null);
items.forEach((item) => result[ids.indexOf(item.id)] = item);
用于使用所需长度和
null
值创建新数组,并将实际项目分配给所需插槽

console.time('generate');
const arrays=generatarrays(100);//项目数,检查代码段下面的性能统计
控制台时间(“重新排序”);
重新排序(arrays.id、arrays.items);
功能重新排序(ID、项目){
让结果=数组(ids.length).fill(null);
items.forEach((item)=>result[id.indexOf(item.id)]=item;
控制台。时间结束(“重新排序”);
console.log('最终结果:',结果);
}
//生成巨大的随机数组([ID],[items])
//*随机项目缺失
//*项目被随机洗牌
函数生成器阵列(计数){
设ids=[];
设项目=[];
设itemsIndex=0;
for(设i=0;i

.as控制台包装{最大高度:100%!重要;顶部:0;}
为了提高速度,您只需使用穷人的javascript内置映射选项。可以非常快速地查找对象的属性名称,使所有对象都成为映射。映射可排序项,然后按排序顺序将其添加到数组中。省去了调用indexOf或find的麻烦。虽然搜索仍在进行,但比数组快得多方法

const ids = ["first", "second", "third", "fourth", "fifth", "sixth"];

const items = [
  {id: "third", value: ".."},
  {id: "fifth", value: ".."},
  {id: "first", value: ".."},
  {id: "fourth", value: ".."}
];
const itemsSort = {};
items.forEach(item => itemsSort[item.id] = item);
items.length = 0;
ids.forEach(id=>items.push(itemsSort[id]));
或者使用Map对象执行同样的操作。如果不确定速度是否与上面的匹配,则必须尝试

// from first snippets data set
const map = new Map();
items.forEach(item => map.set(item.id,item));
items.length = 0;
ids.forEach(id=>items.push(map.get(id)));

为了提高速度,如果您能够更改
id
,我会将其设置为对象而不是数组。这样,您就可以将其用作正确索引的快速查找表,而不必使用
array.prototype.findIndex
不断循环数组

const-id={
“第一”:0,
"第二":一,,
"三":二,,
"四":三,,
“第五”:4,
“第六”:5
};
常数项=[
{id:“第三”,值:“…”},
{id:“第五”,值:“…”},
{id:“第一”,值:“…”},
{id:“第四”,值:“…”}
];
//创建一个空值数组,该数组包含尽可能多的空值
//条目,因为ID中有项目
设排序=[];
sorted.length=Object.keys(id).length;
已排序。填充(空);
//循环我们拥有的项目并插入它们
//放入空数组中的正确插槽
items.forEach((项目)=>{
让index=ids[item.id];
已排序[索引]=项目;
});
docum