返回
用这种绝妙思路,找出数组中共享ID的项!
见解分享
2023-12-08 17:56:37
有的时候,我们需要比较两个数组,找出其中共享ID的项。这在数据分析、去重处理等场景中十分有用。本篇文章将介绍一种巧妙的方法,帮助您轻松完成这项任务。
思路
我们不妨先从一个例子开始。假设我们有两个数组:
const array1 = [{id: 1, name: 'John Doe'}, {id: 2, name: 'Jane Smith'}, {id: 3, name: 'Michael Jones'}];
const array2 = [{id: 2, name: 'Jane Smith'}, {id: 4, name: 'Mary Johnson'}, {id: 5, name: 'Peter Parker'}];
现在,我们的目标是找出array1
和array2
中共享ID的项,结果应该如下:
[{id: 2, name: 'Jane Smith'}]
思路很简单:我们可以先将array1
中的对象转换为一个以ID为键、对象本身为值的映射表。然后,我们遍历array2
中的每个对象,检查其ID是否在映射表中。如果是,我们就可以将该对象添加到结果数组中。
代码实现
JavaScript
function findSharedItems(array1, array2) {
// 将array1中的对象转换为映射表
const map = {};
for (const obj of array1) {
map[obj.id] = obj;
}
// 遍历array2中的每个对象
const sharedItems = [];
for (const obj of array2) {
// 检查对象ID是否在映射表中
if (map[obj.id]) {
// 如果在,将对象添加到结果数组中
sharedItems.push(obj);
}
}
return sharedItems;
}
const array1 = [{id: 1, name: 'John Doe'}, {id: 2, name: 'Jane Smith'}, {id: 3, name: 'Michael Jones'}];
const array2 = [{id: 2, name: 'Jane Smith'}, {id: 4, name: 'Mary Johnson'}, {id: 5, name: 'Peter Parker'}];
console.log(findSharedItems(array1, array2)); // [{id: 2, name: 'Jane Smith'}]
Python
def find_shared_items(array1, array2):
# 将array1中的对象转换为字典
map = {}
for obj in array1:
map[obj["id"]] = obj
# 遍历array2中的每个对象
shared_items = []
for obj in array2:
# 检查对象ID是否在字典中
if obj["id"] in map:
# 如果在,将对象添加到结果数组中
shared_items.append(obj)
return shared_items
array1 = [{'id': 1, 'name': 'John Doe'}, {'id': 2, 'name': 'Jane Smith'}, {'id': 3, 'name': 'Michael Jones'}]
array2 = [{'id': 2, 'name': 'Jane Smith'}, {'id': 4, 'name': 'Mary Johnson'}, {'id': 5, 'name': 'Peter Parker'}]
print(find_shared_items(array1, array2)) # [{'id': 2, 'name': 'Jane Smith'}]
Java
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
class FindSharedItems {
public static List<Item> findSharedItems(List<Item> array1, List<Item> array2) {
// 将array1中的对象转换为映射表
HashMap<Integer, Item> map = new HashMap<>();
for (Item obj : array1) {
map.put(obj.getId(), obj);
}
// 遍历array2中的每个对象
List<Item> sharedItems = new ArrayList<>();
for (Item obj : array2) {
// 检查对象ID是否在映射表中
if (map.containsKey(obj.getId())) {
// 如果在,将对象添加到结果数组中
sharedItems.add(obj);
}
}
return sharedItems;
}
public static class Item {
private int id;
private String name;
public Item(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
public static void main(String[] args) {
List<Item> array1 = new ArrayList<>();
array1.add(new Item(1, "John Doe"));
array1.add(new Item(2, "Jane Smith"));
array1.add(new Item(3, "Michael Jones"));
List<Item> array2 = new ArrayList<>();
array2.add(new Item(2, "Jane Smith"));
array2.add(new Item(4, "Mary Johnson"));
array2.add(new Item(5, "Peter Parker"));
List<Item> sharedItems = findSharedItems(array1, array2);
for (Item item : sharedItems) {
System.out.println(item.getId() + " " + item.getName());
}
}
}
总结
通过这种巧妙的方法,我们可以轻松地比较两个数组,找出其中共享ID的项。这种方法非常简单易懂,而且可以在各种编程语言中实现。希望本文对您有所帮助。