【问题标题】:Array filter method to match IDs and check properties exist匹配 ID 和检查属性的数组过滤方法是否存在
【发布时间】:2019-04-09 07:33:06
【问题描述】:

我目前正在使用一种方法来尝试过滤一些数组,该方法几乎可以工作,但我似乎无法访问确切的值 -

我进行调用并将每个返回的数组添加到一个更大的数组中,然后这些数组将被分配一个 productId 可能还有一些数据,我正在使用这个附加 productIds:

    data.push({'productId':  product.id});

不幸的是,它向数组中添加了一个新对象,这意味着我下面的函数不起作用,除非 productId 在每个数组的第一个对象中:

    let matchedArray = data.flatMap(arr => arr.filter(obj => obj.productId == id))

我需要做的是将数组过滤到与 productId 和 ID 匹配的子数组,并且该子数组还包含一些数据字段,例如“名称”-因此它会检查名称是否为空。

数据集看起来像这样(子数组的数组)

  id = 12345


    data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"africa soul 
    2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Ev
    ent","members":null},{"productId":"12345"}],[],[],[],[],[],[],
    [],[],[],[],[]]

正如您所见,productId 已附加到数组中,但现在不能使用我的过滤方法,我需要过滤具有匹配 ID 的正确数组,并且至少其中一个字段也存在。我要么需要更改 productId 手动附加的方式,要么更改过滤方法?

如果你能帮忙,非常感谢

【问题讨论】:

  • 请在问题中发布 data 的内容
  • 我有,数据数组在那里 data = [[],[],[],[...等
  • 为什么把空数组压入数据?
  • 预期输出是什么?
  • 预期的输出是包含数据的数组 - 我得到每个空的数组来安慰

标签: javascript arrays


【解决方案1】:

如果您想filter 具有some 对象且productId 等于给定值的所有数组:

let data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"africa soul 2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Event","members":null},{"productId":"12345"}],[],[],[],[],[],[],[],[],[],[],[]],
    id = "12345";

let filtered = data.filter(arr => arr.some(a => a.productId === id))

console.log(filtered)

如果您想获得第一个匹配项,请使用find 而不是filter

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2014-12-09
    • 2016-02-25
    • 2016-05-06
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多