【发布时间】:2019-01-23 21:11:39
【问题描述】:
我必须合并两个数组并根据比较按创建的值排序。我不想使用任何内置的 js 函数,例如 sort。我尝试使用 while 循环,但无法找出确切的解决方案。这是我的示例代码:
function merge(a, b, n, m)
{
res = [];
i = 0; j = 0; k = 0;
while(i < n && j < m) {
if(a[i]['created'] < b[j]['created']) {
res.push(a[i]);
i++;
} else {
res.push(b[j]);
j++;
}
}
while(i < n) {
res.push(a[i]);
i++;
}
while(j < m) {
res.push(b[j]);
j++;
}
return res;
}
a = [{'title':'title1', 'created':'18'},{'title':'title2', 'created':'16'},{'title':'title3', 'created':'20'}];
b = [{'title':'title4','created':'17'},{'title':'title5','created':'19'}];
n = a.length;
m = b.length;
var endResult = merge(a, b, n, m);
console.log(endResult);
我的预期输出应该如下:
[{'title':'title2', 'created':'16'},{'title':'title4','created':'17'},{'title':'title1', 'created':'18'},{'title':'title5','created':'19'},{'title':'title3', 'created':'20'}];
请让我知道我在这里错过了什么。
注意:我不想使用像 sort() 这样的内置 Javascript 函数。我必须根据特定的业务逻辑对值进行排序,我将在弄清楚基本排序后实现。
【问题讨论】:
-
这是某种采访“用algs难倒你”的问题吗?你为什么不使用任何专业人士都会使用的功能呢?
-
@TimConsolazio 我的最终结果不仅仅是一个排序数组。我必须实现许多其他条件进行排序。只是我坚持基本的排序部分。
-
我可以注意到的第一个问题是,您只是将数组
a的元素与数组b的元素进行比较。您还需要比较属于同一数组的元素。 -
@GaneshBabu 听起来像是 XY 问题的介绍。
-
编写
sort例程很简单。有很多 BubbleSorts、QuickSorts、TimSorts、MergeSorts 等在线示例。虽然您可以轻松地编写您自己的其中一个版本,但它很可能不会提供使用提供给内置sort的自定义比较器编写代码的功能。您甚至可以在merge步骤中重用该比较器。自定义sort仅在您将其作为学习练习时才有意义。
标签: javascript html arrays sorting