返回

用这种绝妙思路,找出数组中共享ID的项!

见解分享

有的时候,我们需要比较两个数组,找出其中共享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'}];

现在,我们的目标是找出array1array2中共享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的项。这种方法非常简单易懂,而且可以在各种编程语言中实现。希望本文对您有所帮助。