匹配ID和检查属性的数组过滤方法

时间:2019-04-09 07:33:07

标签: javascript arrays

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

我打电话并将每个返回的数组添加到更大的数组中,然后将为这些数组分配一个productId以及一些数据,我将使用以下方法附加productId:

  <TextInput
                          multiline = {true}
                          style={{ padding: 10,height: 45,}}
                          numberOfLines = {2}
                          underlineColorAndroid = {Colors.tintColor}
                      />

不幸的是,这将新对象添加到数组中,这意味着除非productId位于每个数组的第一个对象中,否则下面的函数将不起作用:

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

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

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

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

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

非常感谢您能提供帮助

1 个答案:

答案 0 :(得分: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