javascript - 用于匹配 ID 并检查属性是否存在的数组过滤方法

标签 javascript arrays

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

我进行调用并将每个返回的数组添加到一个更大的数组中,然后这些数组将被分配一个productId,也许还有一些数据,我使用以下方式附加productId:

    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 的方式,或者更改过滤方法?

如果您能提供帮助,非常感谢

最佳答案

如果你想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

关于javascript - 用于匹配 ID 并检查属性是否存在的数组过滤方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587347/

相关文章:

javascript - Eslint 在 React 组件中将字符串视为数组

javascript - analytics.js 的 SegmentIO 开源版本设置问题

javascript - 存储二维数组的技巧

c - 在 C 中重投的特定骰子

c - char数组的问题= char数组

javascript - 有没有办法简化这段 JavaScript 代码?

javascript - 单击两次后 jQuery 动画不起作用

javascript - php中仅通过AJAX向数据库插入数据。

javascript - 在两个不同的 jQuery 类之间切换

php - 数组值不能插入多于一项的数据