Javascript 用于嵌套ng重复的复杂自定义筛选器

Javascript 用于嵌套ng重复的复杂自定义筛选器,javascript,angularjs,Javascript,Angularjs,我已经为此坚持了两天,尝试了很多方法,但仍然没有成功。我无法更改API数据,因此必须处理前端处理。我真的需要一些帮助 $scope.stationary = [{ "name": "Pen", "data": [{ "date": "1-10-2017", "inventory": 25 }, { "date": "2-10-2017", "inventory": 21 }] }, { "name":

我已经为此坚持了两天,尝试了很多方法,但仍然没有成功。我无法更改API数据,因此必须处理前端处理。我真的需要一些帮助

  $scope.stationary = [{
    "name": "Pen",
    "data": [{
      "date": "1-10-2017",
      "inventory": 25
    }, {
      "date": "2-10-2017",
      "inventory": 21
    }]
  }, {
    "name": "Color Pencil",
    "data": [{
      "date": "1-10-2017",
      "inventory": 3
    }, {
      "date": "2-10-2017",
      "inventory": 0
    }]
  }, {
    "name": "Color Pencil Special",
    "data": [{
      "date": "1-10-2017",
      "inventory": 2
    }, {
      "date": "2-10-2017",
      "inventory": 1 // make this view to '-' since inventory of color pencil is zero
    }]
  }]

如果彩色铅笔的库存为零,则应在彩色铅笔专用列上显示“-”。

尝试以下操作:

更新的答案

myApp.filter('customFilter', function() {
    return function(items) {
        for (var i = 0; i < items.length; i++) {
            for (var k = 0; k < items[i].data.length; k++) {
                if (i != 0 && items[i - 1].data[k].inventory == 0) {
                    items[i].data[k]['isZero'] = true;
                } else {
                    items[i].data[k]['isZero'] = false;
                }
            }
        }
        return items;
    };
});
myApp.filter('customFilter',function(){
返回函数(项目){
对于(变量i=0;i
请参阅
更新的JSFIDLE


它对我有用。

我猜你必须操作数据本身,你不能简单地对这种特殊情况使用过滤器

这是我的小提琴:

使用的解决方案(取决于数据的名称):

var位置=[];
$scope.stative.forEach(函数){
如果(s.name===‘彩色铅笔’){
对于(var i=0;i=0){
s、 数据[i]。存货='-';
}
}
}
});

您没有理解问题。应在0的底列上应用“-”,而不是0本身。在我的情况下,2017年2月10日的彩色铅笔特价应为
0
。如果
库存
为0,则您需要为
名称:彩色铅笔特价
添加-for
名称:彩色铅笔特价
?否,彩色铅笔特价的库存栏。这是最右下角的一列。我想你最好在你的问题中给出一个结果表的例子,它不清楚你想要实现什么。@JennyMok那么逻辑是什么?如果“X”的库存为0,那么“X特殊”的库存为“-”?因为您向F3L1X79评论说数据可以更改,如果可以更改,那么应该有一些逻辑,否则无法猜测。这不是一个好的解决方案,如果将来数据更改呢?这就是我写指令的要点,所以它是可重用的。不要觉得我应该像这样硬编码名称。我需要一个指令:(你只需要将名称存储为常量,并使用这些常量和我的循环创建一个函数就行了?
var positions = [];
$scope.stationary.forEach(function (s) {
     if(s.name === 'Color Pencil'){
        for(var i = 0; i < s.data.length; i++){
          if(s.data[i].inventory === 0){
            positions.push(i);
          }
        }
     }
     if(s.name === 'Color Pencil Special'){
        for(var i = 0; i < s.data.length; i++){
          if(positions.indexOf(i) >= 0){
            s.data[i].inventory = '-';
          }
        }
     }
  });