2794. 从两个数组中创建对象 🔒
2794. 从两个数组中创建对象 🔒
题目
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
andvaluesArr
are valid JSON arrays2 <= JSON.stringify(keysArr).length, JSON.stringify(valuesArr).length <= 5 * 10^5
keysArr.length === valuesArr.length
题目大意
给定两个数组 keysArr
和 valuesArr
,返回一个新的对象 obj
。obj
中的每个键值对都来自 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 = []
输出:{}
解释: 没有键,因此返回一个空对象。
提示:
keysArr
和valuesArr
都是有效的 JSON 数组2 <= JSON.stringify(keysArr).length, JSON.stringify(valuesArr).length <= 5 * 10^5
keysArr.length === valuesArr.length
解题思路
首先创建一个空对象
result
,该对象将存储最终的键值对。使用
for
循环遍历keysArr
数组,同时根据i
获取对应的valuesArr[i]
值。处理重复键:
- 如果当前键已经存在于
result
对象中,使用continue
跳过该键值对,避免重复插入。 - 如果当前键不存在于
result
中,则将keysArr[i]
作为键,valuesArr[i]
作为值,添加到result
中。
- 如果当前键已经存在于
最终返回构建好的对象
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;
};