Javascript 用于嵌套ng重复的复杂自定义筛选器
我已经为此坚持了两天,尝试了很多方法,但仍然没有成功。我无法更改API数据,因此必须处理前端处理。我真的需要一些帮助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":
$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 = '-';
}
}
}
});