首页 > 其他分享 >如何实现一个数组按照另外一个数组的顺序进行排序?

如何实现一个数组按照另外一个数组的顺序进行排序?

时间:2023-09-25 19:14:44浏览次数:34  
标签:aIndex 顺序 数组 let arr2 arr1 排序 id name

数组arr1按照arr2的顺序展示,如何实现:

一、简单类型数组

let arr1 = [1, 2, 3, 4, 5]
let arr2 = [5, 3, 2, 4, 1]

arr1.sort((prev,next)=>{
	return arr2.indexOf(prev)-arr2.indexOf(next)
})
console.log(arr1)       // [5, 3, 2, 4, 1] 

二、复杂类型数组

let arr1 = [ { id: 1, name: '小米' }, { id: 3, name: '小红' }, { id: 4, name: '小明' }, { id: 2, name: '小华' } ]
let arr1 = [ { id: 1, name: '小米' }, { id: 2, name: '小华' }, { id: 3, name: '小红' }, { id: 4, name: '小明' } ]

方法一:
let sortIndex = arr2.map(item => item.id) arr1.sort((a, b) => sortIndex.indexOf(a.id) - sortIndex.indexOf(b.id)) console.log(arr1)

 

方法二:
let order = new Map(twoArr.map((item, index) => [item.intID, index]));
arr1.sort((a, b) => {
	let orderA = order.has(a.id) ? order.get(a.id) : Infinity;
	let orderB = order.has(b.id) ? order.get(b.id) : Infinity;
	return orderA - orderB;
});
console.log(arr1)   
方法三:
const newArr = [];
arr2.forEach((twoE) => {
    arr1.forEach((oneE) => {
	if (twoE.id === oneE.id) {
		newArr.push(oneE);
	}
    });
});
console.log(newArr)
方法四:
const cache = {};
arr1.sort((a, b) => {
	const aId = a.id, bId = b.id;
	let aIndex = cache[aId] ?? -1;
	let bIndex = cache[bId] ?? -1;
	if (aIndex < 0 || bIndex < 0) {
		for (let i = 0; i < arr2.length; ++i) {
		       const id = arr2[i].id;
		       if (aId === id) aIndex = cache[aId] = i;
		       if (bId === id) bIndex = cache[bId] = i;
		       if (aIndex >= 0 && bIndex >= 0) break;
		 }
	}
	return aIndex - bIndex;
});
console.log(arr1)

结果:

 

标签:aIndex,顺序,数组,let,arr2,arr1,排序,id,name
From: https://www.cnblogs.com/heisetianshi/p/17728633.html

相关文章

  • (转)图的存储结构|邻接矩阵、邻接表、十字链表、邻接多重表、边集数组
    原文:https://juejin.cn/post/6996132859001962504?searchId=20230925172238C35D1579B2CBC3D2F78A7.4图的存储结构图的存储结构相较线性表与树来说就更加复杂了。首先,我们口头上说的“顶点的位置”或“邻接点的位置”只是一个相对的概念。其实从图的逻辑结构定义来看,图上任何......
  • 【C++】动态内存管理 ⑤ ( 基础数据类型数组 内存分析 | 类对象 内存分析 | malloc 分
    文章目录一、基础数据类型数组内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存二、类对象内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存博客总结:C语言中使用malloc分配的内存,使用free进行释放;C++语言中......
  • Java -【字符串,数组,哈希表】常用操作
    一.字符串创建字符串:可以使用双引号或者String类的构造方法创建字符串。Stringstr1="HelloWorld";Stringstr2=newString("HelloWorld");连接字符串:可以使用加号或者String类的concat()方法连接字符串。Stringstr3=str1+str2;Stringstr4=str1.concat(str2);......
  • Go - 【字符串,数组,哈希表】常用操作
    一.字符串字符串长度:s:="hello"l:=len(s)fmt.Println(l)//输出5遍历字符串:s:="hello"fori,c:=ranges{fmt.Printf("%d:%c",i,c)}//输出:0:h1:e2:l3:l4:ofori:=0;i<len(s);i++{ fmt.Printf("%s",s[......
  • Java -【字符串,数组,哈希表】常用操作
    一.字符串创建字符串:可以使用双引号或者String类的构造方法创建字符串。Stringstr1="HelloWorld";Stringstr2=newString("HelloWorld");连接字符串:可以使用加号或者String类的concat()方法连接字符串。Stringstr3=str1+str2;Stringstr4=str1.concat(str2);获......
  • LeetCode 918. 环形子数组的最大和
    环形子数组的最大和(medium)题目链接:918.环形子数组的最大和题目描述:给定一个长度为n的环形整数数组nums,返回nums的非空子数组的最大可能和。环形数组意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i+1)%n],nums[i]的前一个元素......
  • LeetCode 53. 最大子数组和
    最大子数组和(medium)题目链接:53.最大子数组和题目描述:给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大......
  • lambda HashMap 排序
    目录TreeMaplambdacomparingByKey示例代码TreeMap按key排序生成map可以有TreeMap完成,TreeMap可以按key的自然顺序排序(Comparable实现)lambdacomparingByKey使用lambda也可以很方便的对map排序Map.Entry.comparingByKey()按key排序的ComparatorMap.Entry.comparingBy......
  • C语言统计数组里面各个元素出现的次数
    #include<iostream>#include<stdio.h>intmain(){intnums[]={1,1,2,2,3,4,5,6,6};intsize=sizeof(nums)/sizeof(nums[0]);//创建一个全0的空数组int*counterNums=(int*)calloc(size,sizeof(int));for(inti=......
  • Java数组
    Arrayjava语言中数组是一种引用数据类型。不属于基本数据类型。数组的父类是object。数组是一个容器,数组是一个数据的集合。数组中可以储存基本数据类型的数据,也可以储存引用数据类型的数据。数组是引用类型,所以数组对象储存在堆内存当中的。数组当中储存的是Java对象的话,实......