Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并2个不同数据类型的数组_Javascript_Algorithm - Fatal编程技术网

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

Javascript 合并2个不同数据类型的数组,javascript,algorithm,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

今天我和一位同事交谈,他刚刚给一位潜在员工(没有得到录用)进行了白板考试,这让我想知道我是否能解决一位入门级潜在员工的问题

我不能

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

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]

TypeScript中的解决方案是:

var arrayOne: number[] = [];
for (var i = 1; i<=100; i++) arrayOne.push(i);
var arrayTwo: string[] = ['a', 'b', 'c', 'd', 'e'];


var max = Math.max(arrayOne.length, arrayTwo.length);

var result = [];
for (var i = 0; i < max; i++){
    if (arrayTwo[i])
        result.push(arrayTwo[i]);
    if (arrayOne[i])
        result.push(arrayOne[i]);
}

console.log(result)
> [1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e', 6, ..., 26, 27, 28, ..., 100]
var arrayOne:number[]=[];
对于(变量i=1;i[1,'a',2,'b',3,'c',4,'d',5,'e',6,…,26,27,28,…,100]

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

类似的方法应该可以工作,它只是迭代两个数组,并且仅在新的“合并”数组中添加元素(如果存在
0
'
,则可能需要检查是否为null或未定义)

函数合并(a1、a2){
const merged=数组(a1.length+a2.length);
设指数=0,i1=0,i2=0;
而(i1console.log(结果)
如果
a=1
,则
['a',1',b',2,…]
也是一个有效的解决方案?您尝试过什么?您具体需要什么帮助?Stack Overflow不是编码高尔夫,也不是代码编写服务。您需要做出一些努力来解决问题,并与他人分享您的结果和困难,以便回答您具体需要什么帮助。这是怎么回事一个“可悲的借口”?你还没有发布一个明确的、适用的(SO)代码有问题。@PeterDuniho稍微更新了我的帖子,是的,这也是一个有效的解决方案。我也看到过另一个例子,有人将所有内容都转换为HashMap,但这似乎有点过分。@alfasin:看起来不是同一个问题。压缩数组会产生元组数组。在这里,两个数组合并为into一个新的Singlet数组。@itsclarke:看起来您的代码非常接近。这取决于Javascript(我不使用)如何处理索引超出范围的情况,即
arr1[i1]>arr2[i2]
当其中一个索引超出数组末尾时计算到?在一天结束时,它应该只是一个基本的合并排序,稍作调整以使数字和字符具有可比性(即当您希望它计算到
1
时,
'a'
通常计算到
97
)我接受了,但后来我注意到一个bug…看到了吗edit@itsclarke啊,很抱歉,我没有理解这个问题,这是修改后的答案。注意,在这种情况下,第二个数组总是带有字符的数组。如果需要,切换它应该很简单。
var arrayOne: number[] = [];
for (var i = 1; i<=100; i++) arrayOne.push(i);
var arrayTwo: string[] = ['a', 'b', 'c', 'd', 'e'];


var max = Math.max(arrayOne.length, arrayTwo.length);

var result = [];
for (var i = 0; i < max; i++){
    if (arrayTwo[i])
        result.push(arrayTwo[i]);
    if (arrayOne[i])
        result.push(arrayOne[i]);
}

console.log(result)
> [1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e', 6, ..., 26, 27, 28, ..., 100]