合并2个不同数据类型的数组

时间:2019-07-16 00:37:55

标签: javascript algorithm

我今天在与一位同事进行过交谈,这位同事刚刚对一位潜在员工(未获得报价)进行了白板考试,这让我怀疑我是否可以解决入门级潜在客户的这一问题。

我不能。

问题是...将两个排序后的数组合并为一个数组。

arrayOne = ['a', 'b', 'c', ...'z']
arrayTwo = [1, 2, 3, 4, 5, ...100]

result = [1, 'a', 2, 'b', ...26, 'z', 27, 28, ...100]

这里的想法是

a = 1
b = 2
c = 3
...
z = 26

我环顾四周,无法找到简单的解决方案。请记住,我们主要使用JavaScript,但是潜在员工可以使用他们在面试中选择的任何语言。

我尝试失败的借口:

function merge_arrays(arr1, arr2) {
    let result = [];
    let i1 = 0;
    let i2 = 0;

    for (var i = 0; i < arr1.length + arr2.length; i++) {
        if (arr1[i1] > arr2[i2]) {
            result.push(arr2[i2]);
            i2 += 1;
        } else {
            result.push(arr1[i1]);
            i1 += 1;
        }
    }

    return result;
}

array1 = ["a", "b", "c", "d", "e"];
array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
// returns ["a", "b", "c", "d", "e", undefined, undefined, ...undefined]

在这种情况下,您不能仅获取下一个索引并假定它在正确的位置。

array1 = ["a", "c", "d", "e"];
array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
// should return ["a", 1, 2, "c", 3, "d", 4, ...13]

2 个答案:

答案 0 :(得分:0)

TypeScript中的解决方案是:

tabBarView

可以添加一个if来检查应该先添加哪个,但是由于未指定,因此添加起来似乎很冗长。

答案 1 :(得分:0)

类似的事情应该起作用,它只会迭代两个数组,并且仅在新的“合并”数组存在时将它们添加到元素中(如果0''可以,则可能要检查null或未定义的元素在场)。

function merge(a1, a2) {
    const merged = Array(a1.length + a2.length);
    let index = 0, i1 = 0, i2 = 0;
    while (i1 < a1.length || i2 < a2.length) {
      if (a1[i1] && a2[i2]) {
        const item1 = a1[i1];
        const item2 = a2[i2].charCodeAt(0)-96;
        merged[index++] = (item1 < item2) ? a1[i1++] : a2[i2++]
      } 
      else if (a1[i1]) merged[index++] = a1[i1++];
      else if (a2[i2]) merged[index++] = a2[i2++];
    }
    return merged;
}

// Array with characters always passed as 2nd array
const array1 = [1, 2, 3, 4, 5, 6];
const array2 = ['a', 'c', 'd', 'e'];
const result = merge(array1, array2);

console.log(result)