我目前正在使用一种方法来尝试过滤一些数组,该方法几乎可以工作,但我似乎无法访问确切的值 -
我进行调用并将每个返回的数组添加到一个更大的数组中,然后这些数组将被分配一个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/