You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java JSONArray与JavaScript数组内部元素比对及编号规则技术问询

Hey there! Let's break down how to handle both your array processing requirements—one for Java's JSONArray and another for JavaScript arrays. Both tasks center around grouping elements by a combined location + date key (let's call it Key1) and assigning consistent numbers. Here's a step-by-step breakdown for each:

1. Java JSONArray: Pairwise Comparison & Consistent Number Assignment

First, the core idea is to:

  • Generate a unique Key1 for each element by combining location and date
  • Use a map to track which Key1 maps to which number (so duplicates get the same number)
  • Run a pairwise comparison to check element relationships based on Key1

Here's a concrete implementation using the org.json library:

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

public class JSONArrayProcessor {
    public static void processAndCompare(JSONArray jsonArray) {
        // Map to store Key1 -> assigned number
        Map<String, Integer> keyNumberMap = new HashMap<>();
        int nextNumber = 1;

        // Step 1: Assign consistent numbers to elements
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject element = jsonArray.getJSONObject(i);
            String location = element.getString("location");
            String date = element.getString("date");
            String key1 = location + "_" + date; // Combine into unique Key1

            // Assign number if Key1 is new
            if (!keyNumberMap.containsKey(key1)) {
                keyNumberMap.put(key1, nextNumber++);
            }
            element.put("Number", keyNumberMap.get(key1));
        }

        // Step 2: Pairwise comparison of elements
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject elem1 = jsonArray.getJSONObject(i);
            String key1_1 = elem1.getString("location") + "_" + elem1.getString("date");

            for (int j = i + 1; j < jsonArray.length(); j++) {
                JSONObject elem2 = jsonArray.getJSONObject(j);
                String key1_2 = elem2.getString("location") + "_" + elem2.getString("date");

                if (key1_1.equals(key1_2)) {
                    System.out.printf("Elements %d and %d share the same Key1: %s%n", i, j, key1_1);
                    // Add custom logic here if needed for matching elements
                } else {
                    System.out.printf("Elements %d and %d have different Key1s: %s vs %s%n", i, j, key1_1, key1_2);
                    // Add custom logic here if needed for non-matching elements
                }
            }
        }
    }

    public static void main(String[] args) {
        // Sample input
        JSONArray sample = new JSONArray();
        sample.put(new JSONObject().put("location", "Tokyo").put("date", "2024-06-01"));
        sample.put(new JSONObject().put("location", "Paris").put("date", "2024-06-01"));
        sample.put(new JSONObject().put("location", "Tokyo").put("date", "2024-06-01"));

        processAndCompare(sample);
        System.out.println("Final JSONArray: " + sample.toString());
    }
}

How it works:

  • The keyNumberMap ensures that every element with the same Key1 gets the exact same Number value
  • The nested loops handle pairwise comparison, letting you add custom logic for matching or non-matching elements
2. JavaScript Array: Assign Consistent Numbers by Key1

For JavaScript, the approach is similar—we'll use an object as a map to track Key1-to-number mappings, then iterate through the array to assign numbers. Here's the code:

// Core function to assign numbers based on location + date key
function assignConsistentNumbers(arr) {
    const keyToNumber = {};
    let currentNumber = 1;

    // Return a new array with added Number property
    return arr.map(element => {
        const key1 = `${element.location}_${element.date}`;
        // Assign number if Key1 hasn't been seen before
        if (!keyToNumber[key1]) {
            keyToNumber[key1] = currentNumber++;
        }
        return { ...element, Number: keyToNumber[key1] };
    });
}

// Optional: Pairwise comparison function
function compareElementsPairwise(arr) {
    for (let i = 0; i < arr.length; i++) {
        const key1_i = `${arr[i].location}_${arr[i].date}`;
        for (let j = i + 1; j < arr.length; j++) {
            const key1_j = `${arr[j].location}_${arr[j].date}`;
            if (key1_i === key1_j) {
                console.log(`Elements ${i} and ${j} have matching Key1: ${key1_i}`);
            } else {
                console.log(`Elements ${i} and ${j} have distinct Key1s: ${key1_i} vs ${key1_j}`);
            }
        }
    }
}

// Example usage
const inputArray = [
    { location: "Sydney", date: "2024-06-02" },
    { location: "Berlin", date: "2024-06-02" },
    { location: "Sydney", date: "2024-06-02" },
    { location: "Berlin", date: "2024-06-03" }
];

const processedArray = assignConsistentNumbers(inputArray);
console.log("Processed Array:", processedArray);
compareElementsPairwise(processedArray);

How it works:

  • The map() method creates a new array with the Number property added, keeping the original array intact (you can modify in-place if needed)
  • The keyToNumber object ensures duplicate Key1s get the same number, while new Key1s get incremented numbers
  • The optional pairwise comparison function lets you inspect relationships between every element pair

内容的提问来源于stack exchange,提问作者Karthikeyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:24:38