按子数组过滤对象

时间:2017-01-30 16:25:48

标签: javascript angularjs ionic-framework

我有以下对象:

enter image description here

我可以根据子阵列收据过滤它吗?

示例:如果配方位置1具有user_id“11111”,则显示整个对象,否则我将删除整个对象

我这样想:

function get() {
  var allParkings = Parking.getParkings();
    allParkings.$loaded().then(function(data) {
        data.forEach(function(value, key) {
            console.log(value);
            value.receipts.forEach(function(rcpts, key) {
              if (rcpts.user_id === user.uid) {
              console.log('found');
            }
        })
    })
  })
}

修改

对于延迟表示歉意,我使用了所有答案来创建解决方案。

function get() {
 var allParkings = Parking.getParkings();
 allParkings.$loaded().then(function(data) {
    vm.parkings = data;
    vm.parkings.forEach(function(value, key) {
    value.filteredReceipts = [];
    value.receipts.forEach(function(rcpts) {
        if (rcpts.user_id === user.uid) {
          value.filteredReceipts.push(rcpts);
        }
      })
    })
  })
}

3 个答案:

答案 0 :(得分:1)

使用内置函数find,如果找到则返回值,否则为null

data.forEach(function(value, key) {
    console.log(value);
    var found = value.receipts.find(function(rcpts) {
        return rcpts.user_id === user.uid;
    });
    if(found !== null)
        // found
        // console.log(value); goes here
    else
        // not found
        // delete value; goes here
})

以上代码是filter的确切用例。所以你可以这样做:

data = data.filter(function(value) {
    var found = value.receipts.find(function(rcpts) {
        return rcpts.user_id === user.uid;
    });
    return found !== null;
});
// log the filtered elements
data.forEach( d => console.log(d));

答案 1 :(得分:0)

类似下面的代码。基本上使用delete运算符在满足条件时删除对象。

var obj = yourObject;

if(obj.receipts && obj.receipts.length > 2){
      if(obj.receipts[1].user_id !== "11111"){
           delete obj;
      }
}

答案 2 :(得分:0)

您可以通过写作来完成 angular custom filter

JavaSript array filter function

AdArea