跳至主要內容

2794. 从两个数组中创建对象 🔒


2794. 从两个数组中创建对象 🔒

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

Given two arrays keysArr and valuesArr, return a new object obj. Each key-value pair in obj should come from keysArr[i] and valuesArr[i].

If a duplicate key exists at a previous index, that key-value should be excluded. In other words, only the first key should be added to the object.

If the key is not a string, it should be converted into a string by calling String() on it.

Example 1:

Input: keysArr = ["a", "b", "c"], valuesArr = [1, 2, 3]

Output:

Explanation: The keys "a", "b", and "c" are paired with the values 1, 2, and 3 respectively.

Example 2:

Input: keysArr = ["1", 1, false], valuesArr = [4, 5, 6]

Output:

Explanation: First, all the elements in keysArr are converted into strings. We can see there are two occurrences of "1". The value associated with the first occurrence of "1" is used: 4.

Example 3:

Input: keysArr = [], valuesArr = []

Output: {}

Explanation: There are no keys so an empty object is returned.

Constraints:

  • keysArr and valuesArr are valid JSON arrays
  • 2 <= JSON.stringify(keysArr).length, JSON.stringify(valuesArr).length <= 5 * 10^5
  • keysArr.length === valuesArr.length

题目大意

给定两个数组 keysArr valuesArr,返回一个新的对象 objobj 中的每个键值对都来自 keysArr[i]valuesArr[i]

如果前面的索引中存在重复的键,则应该跳过该键值对。换句话说,只有第一次出现的键会被添加到对象中。

如果键不是字符串,则应通过调用 String() 方法将其转换为字符串。

示例 1:

输入: keysArr = ["a", "b", "c"], valuesArr = [1, 2, 3]

输出:

解释: 键 "a"、"b" 和 "c" 分别与值 1、2 和 3 配对。

示例 2:

输入: keysArr = ["1", 1, false], valuesArr = [4, 5, 6]

输出:

解释: 首先,将 arr1 中的所有元素转换为字符串。我们可以看到有两个 "1" 的出现。使用第一次出现 "1" 的关联值:4。

示例 3:

输入: keysArr = [], valuesArr = []

输出:{}

解释: 没有键,因此返回一个空对象。

提示:

  • keysArrvaluesArr 都是有效的 JSON 数组
  • 2 <= JSON.stringify(keysArr).length, JSON.stringify(valuesArr).length <= 5 * 10^5
  • keysArr.length === valuesArr.length

解题思路

  1. 首先创建一个空对象 result,该对象将存储最终的键值对。

  2. 使用 for 循环遍历 keysArr 数组,同时根据 i 获取对应的 valuesArr[i] 值。

  3. 处理重复键:

    • 如果当前键已经存在于 result 对象中,使用 continue 跳过该键值对,避免重复插入。
    • 如果当前键不存在于 result 中,则将 keysArr[i] 作为键,valuesArr[i] 作为值,添加到 result 中。
  4. 最终返回构建好的对象 result

复杂度分析

  • 时间复杂度: O(n),其中 n 是数组的长度,需要遍历数组 keysArr 一次,插入每个键值对到对象中。
  • 空间复杂度: O(n),需要创建一个新的对象来存储结果。

代码

/**
 * @param {Array} keysArr
 * @param {Array} valuesArr
 * @return {Object}
 */
var createObject = function (keysArr, valuesArr) {
	let result = {};
	for (let i = 0; i < keysArr.length; i++) {
		// 处理重复键
		if (keysArr[i] in result) {
			continue;
		}
		result[keysArr[i]] = valuesArr[i];
	}
	return result;
};