跳转至

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

题目描述

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

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

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

 

示例 1:

输入:keysArr = ["a", "b", "c"], valuesArr = [1, 2, 3]
输出:{"a": 1, "b": 2, "c": 3}
解释:键 "a"、"b" 和 "c" 分别与值 1、2 和 3 配对。

示例 2:

输入:keysArr = ["1", 1, false], valuesArr = [4, 5, 6]
输出:{"1": 4, "false": 6}
解释:首先,将 arr1 中的所有元素转换为字符串。我们可以看到有两个 "1" 的出现。使用第一次出现 "1" 的关联值:4。

示例 3:

输入:keysArr = [], valuesArr = []
输出:{}
解释:没有键,因此返回一个空对象。

 

提示:

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

解法

方法一

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function createObject(keysArr: any[], valuesArr: any[]): Record<string, any> {
    const ans: Record<string, any> = {};
    for (let i = 0; i < keysArr.length; ++i) {
        const k = String(keysArr[i]);
        if (ans[k] === undefined) {
            ans[k] = valuesArr[i];
        }
    }
    return ans;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/**
 * @param {Array} keysArr
 * @param {Array} valuesArr
 * @return {Object}
 */
var createObject = function (keysArr, valuesArr) {
    const ans = {};
    for (let i = 0; i < keysArr.length; ++i) {
        const k = keysArr[i] + '';
        if (ans[k] === undefined) {
            ans[k] = valuesArr[i];
        }
    }
    return ans;
};

评论