【问题标题】:jQuery key value pair array one replace elements of second array.jQuery 键值对数组一替换第二个数组的元素。
【发布时间】:2016-12-09 10:45:42
【问题描述】:

我有两个数组。数组 A 的长度是固定的,数组 B 的长度取决于 DB 结果。 数组 A 和 B 都是键(时间戳)值(计数)对数组。在数组 B 中缺少一些时间戳,我需要将缺少的时间戳值填充为零。如果存在时间戳,我需要使用该值。 我如何做到这一点?

例如: 数组 A = {[time:1481280113, value: 0], [time:1481280053, value: 0],..}

数组 B = {[time:1481280113, value: 1234], [time:1481279983, value: 123],..}

结果 A = {[time:1481280113, value: 0], [time:1481280053, value: 0],[time:1481279983, value: 123]..}

【问题讨论】:

  • 所以在结果 A time:1481280113, value: 0 中,如果我做对了,值实际上应该是 1234 !?
  • 您说 A/B 是数组,但在语法中您将其描述为对象 {} 您的模型定义为数组对象,而理想模型将是对象数组
  • 使用这种表示法,您没有 2 个数组,而是 2 个(无效)JSON 对象...
  • @caramba:是的,你是对的。

标签: javascript jquery html arrays


【解决方案1】:

你知道 MergeSort 算法吗?你可以使用它的 mege 部分,所以:

function mergeArrays(arr1, arr2){
    var a1 = sort array1; //any way you want (EX. 1 < 2 < 3 ...)
    var a2 = sort array2; //any way you want (EX. 1 < 2 < 3 ...)
    var result = [];

    while(a1.length > 0 && a2.length > 0) {
        if(a1[0] < a2[0]) { result.push(a1.shift()); }
        if(a1[0] > a2[0]) { result.push(as.shift()); }
        if(a1[0] == a2[0]) { /* equals, do whatever you want to resolve this */ }       
    }   
    if (a1.length == 0) { result.concat(a2); /* no more elements in a1, append to result the remains of a2*/ }
    if (a2.length == 0) { result.concat(a1); /* no more elements in a2, append to result the remains of a1*/ }

    return result
}

这将返回合并后的数组(并已排序),但是,如果您在 a1[0] == a2[0] 的情况下不删除重复项,您将获得该重复项,因此,在此要小心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2021-12-05
    • 2022-11-16
    • 2021-08-23
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多