【问题标题】:Creating a new Array from Normal Array and Array of objects从普通数组和对象数组创建一个新数组
【发布时间】:2023-04-01 05:10:01
【问题描述】:

我有两个数组,arr1 是一个对象数组,arr2 只是一个常规数组。我正在尝试将arr2 值与arr1 对象中的“原始”值匹配,并将“新”值返回到新的结果数组中。 arr2 中通常有 2 个以上的项目,并且顺序并不总是相同,这就是为什么我不能每次都按索引匹配。

let arr1 = [
        { original: "1x Adjustments", new: "ONETIME_AMT" },
        { original: "Churn", new: "CHURN_AMT" },
        { original: "Funnel", new: "FUNNEL_AMT" },
      ];

let arr2 = [ '1x Adjustments', 'Churn' ]

desiredResult = ["ONETIME_AMT", "CHURN_AMT"]

我尝试多次使用 map 函数,但我得到的最接近的只是返回恰好匹配的第一个元素,也许我也需要在其中使用 for 循环?

var desiredResult = arr2.map(item => item === arr1[0].original ? arr1[0].new : '')

理想情况下,我认为 [0] 可以在 for 循环中替换为 i(索引),但不确定如何在 map 函数中实现 for 循环(或者这是否是正确的解决方案)

【问题讨论】:

  • 使用Array.find,代码:arr2.map(item => arr1.find(({original}) => original == item ).new)

标签: javascript arrays for-loop object


【解决方案1】:

arr1转换为Map(arr1Map),然后映射arr2,从arr1Map获取new的值:

const arr1 = [{"original":"1x Adjustments","new":"ONETIME_AMT"},{"original":"Churn","new":"CHURN_AMT"},{"original":"Funnel","new":"FUNNEL_AMT"}]
const arr2 = [ '1x Adjustments', 'Churn' ]

const arr1Map = new Map(arr1.map(o => [o.original, o.new]))
const result = arr2.map(key => arr1Map.get(key))

console.log(result)

【讨论】:

  • 哇,太有见地了,我不知道你可以从数组中创建一个 Map,这实际上是从数组中取出数组并将其保留为对象吗? Javascript 文档有点混乱
  • Map 的构造函数接受一个结构为[[key, value], [key, value]] 的数组(实际上是任何可迭代的)。在这种情况下,临时数组将在 Map 创建后被垃圾回收。
【解决方案2】:

您也可以为此使用 reduce!

let arr1 = [
        { original: "1x Adjustments", new: "ONETIME_AMT" },
        { original: "Churn", new: "CHURN_AMT" },
        { original: "Funnel", new: "FUNNEL_AMT" },
      ];

let arr2 = [ '1x Adjustments', 'Churn' ]

const findNew = (arr1, arr2) =>
  arr1.reduce((acc, curr) => {
    if(arr2.includes(curr.original)) {
      acc.push(curr.new)
    }
    return acc
  }, [])

console.log(findNew(arr1, arr2))

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2021-03-30
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多