我想要创建的是一个过滤器,它会将文本中的数字拉出文本框。例如:
用户类型:猫去了4家商店,买了3袋猫砂1美元。
结果将是:[4,3,1]
过滤器会看到因为之前的过滤器[''' cat',' go',' to',& #39; 4' ...]
所以我试图创建的是一个for循环,它将遍历数组并检查每个项目以查看它是否实际上是一个数字。但是,for循环在应用程序未被注释时会中断。任何帮助表示赞赏。
filter('showNum', function() {
// this filter is not complete but it will return only numbers from an array
return function isNumeric(title){
var numbers, i, len, numberToAdd;
numbers = [];
len = title.length;
// for(i=0; i<len; i+=1){
// numberToAdd = title[i];
// if(!isNAN(numberToAdd)===False); {numbers.push(numberToAdd);}
return numbers;
};
})
答案 0 :(得分:1)
我会将过滤器更改为like this:
javascript
.filter('showNum', function() {
return function(input) {
if (!input)
{
return [];
}
return input
.split(' ')
.filter(function(item){
return item && !isNaN(item);
})
.map(function(item){
return parseInt(item);
})
};
});
<强> HTML 强>
<body ng-controller="MainCtrl">
<input type="text" ng-model="input">
<p>result: {{ input | showNum }}</p>
</body>
答案 1 :(得分:0)
wZVanG是正确的,这里是使用正则表达式重新访问函数但尊重过滤器的签名,以便它返回一个int数组并将数组作为参数。
filter('showNum', function() {
//this filter returns only numbers from an array
return function isNumeric(title){
var numbers, i, len, numberToAdd;
numbers = [];
var theString = title.toString();
var numbersAsStrings = theString.match(/\b\d+\b/g);
numbersAsString.forEach(function(s){
numbers.push(parseInt(s));
});
return numbers;
})