首页 > 解决方案 > 使用过滤连接两个数组

问题描述

我有两个数组。我需要将它们结合起来并创建一个具有 2、3、4、5、6 的新数组dayOfWeek。这意味着dayOfWeekin的优先级array1。意味着需要保留dayOfWeek3, 4, 5 从array1.

array1 = [
  {dayOfWeek: 2, home1: "01:30"},
  {dayOfWeek: 3, home1: "02:30"},
  {dayOfWeek: 4, home1: "03:30"},
  {dayOfWeek: 5, home1: "04:30"},
]

array2 = [
  {dayOfWeek: 3, home1: "05:30"},
  {dayOfWeek: 4, home1: "06:30"},
  {dayOfWeek: 5, home1: "07:30"},
  {dayOfWeek: 6, home1: "08:30"},
]

输出应该是

finalArray = [
  {dayOfWeek: 2, home1: "01:30"},
  {dayOfWeek: 3, home1: "02:30"},
  {dayOfWeek: 4, home1: "03:30"},
  {dayOfWeek: 5, home1: "04:30"},
  {dayOfWeek: 6, home1: "08:30"},
]

我试过这个,但它dayOfWeek从两个数组中推送。我怎样才能过滤它们?

const finalArray = []
array1.map((a) => {
    array2.map((a2) => {
        if (a.dayOfWeek === a2.dayOfWeek) {
          finalArray.push(a)
        }
        if (a.dayOfWeek === a2.dayOfWeek) {
          finalArray.push(a2)
        }
    })
})

提前致谢!!!

标签: javascriptarraysloopsfor-looplodash

解决方案


您也可以简单地过滤第二个数组中缺少的第一个数组,然后将它们连接到第一个数组而不使用 lodash:

const a1 = [ {dayOfWeek: 2, home1: "01:30"}, {dayOfWeek: 3, home1: "02:30"}, {dayOfWeek: 4, home1: "03:30"}, {dayOfWeek: 5, home1: "04:30"}, ]
const a2 = [ {dayOfWeek: 3, home1: "05:30"}, {dayOfWeek: 4, home1: "06:30"}, {dayOfWeek: 5, home1: "07:30"}, {dayOfWeek: 6, home1: "08:30"}, ]

const r = a1.concat(a2.filter(x => !a1.some(y => y.dayOfWeek == x.dayOfWeek)))

console.log(r)

这是通过Array.concat,Array.filterArray.some


推荐阅读