【问题标题】:How to merge two 2 dimensional arrays with Jquery如何用 Jquery 合并两个二维数组
【发布时间】:2018-04-10 18:02:00
【问题描述】:

我想合并 oldData 和 newData。需要通过将日期排序为升序来显示输出。如果两者都有数据,则添加为 [date , oldValue , New value]。如果数据仅在 newData 中可用,则创建类似 [ '2018-03-30', null, 5 ]

var oldData = [ [ '2018-04-01', 10 ], [ '2018-04-02', 20 ], [ '2018-04-03', 30 ] ];
var newData = [ [ '2018-03-30',  5 ], [ '2018-03-31',  6 ], [ '2018-04-01', 22 ] ];

期望的输出是:

[ [ '2018-03-30', null, 5 ], [ '2018-03-31', null,  6 ], [ '2018-04-01', 10, 22 ] , [ '2018-04-02', 20, null ] , [ '2018-04-03', 30, null ] ];

请帮助我在 jquery / java-script 中实现这一点。

【问题讨论】:

  • 预期输出中的null 来自哪里?让我明白,你想合并 oldData 和 newData 数组?
  • 欢迎来到 Stack Overflow!请访问help center 了解内容和How to Ask。提示:发布努力和代码。
  • @CalvinNunes 假设 pos 1 中为 null 它不在 oldData 中,在 pos 2 中不在新数据中
  • 好的,现在我知道你要合并,但还是不明白那些null,什么是“缺失值”?
  • 你能用语言解释你想要达到的目标吗?如果你能做到这一点,你会发现你离解决方案还有很长的路要走。目前,您提供的只是之前和之后,没有规则/解释。所提供的任何代码都是猜测,可能只适合这些确切值,而不是您试图解决的实际问题。

标签: javascript arrays multidimensional-array array-merge


【解决方案1】:

我会这样做:

let output = [];
oldData.map(e => output.push([new String(e[0]), e[1], null]));

for(const elem of newData) {
  output.map(e => {
    if(e[0] === elem[0]) {
      e[2] = elem[1];
      continue;
    }
  })
  output.push([new String(elem[0]), null, elem[1]]);
}

您使用来自 oldData 的值以所需的结构创建新数组(我使用 new String() 以确保我不只是复制引用 - 如果不需要,请删除)。
然后循环遍历newData 的元素以查看ouptut 是否已经有一个元素。与那个日期。
如果是这样,请将其中的 null 更改为对应元素中的数字。
如果没有,您只需推送一个具有给定日期、空值和数字的新消息。

请记住,这只有在项目唯一时才能正常工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多