给定一个具有$ scope属性的控制器,该控制器是具有其他属性的对象,而不是如下所示的数组,我该如何过滤该ng-repeat
集合?
这是一个JSFiddle:http :
//jsfiddle.net/ZfGx4/110/
控制器:
function HelloCntl($scope, $filter) {
$scope.friends = {
john: {
name: 'John',
phone: '555-1276'
},
mary: {
name: 'Mary',
phone: '800-BIG-MARY'
},
mike: {
name: 'Mike',
phone: '555-4321'
},
adam: {
name: 'Adam',
phone: '555-5678'
},
julie: {
name: 'Julie',
phone: '555-8765'
}
};
}
模板:
<div ng:app>
<div ng-controller="HelloCntl">
<input placeholder="Type to filter" ng-model="query">
<ul>
<li ng-repeat="(id, friend) in friends | filter:query">
<span>{{friend.name}} @ {{friend.phone}}</span>
</li>
</ul>
</div>
</div>
我将数据结构更改为数组。无论如何,这是另一个过滤好友对象的实现。
angular.module('filters',['utils'])
.filter('friendFilter', function(utils){
return function(input, query){
if(!query) return input;
var result = [];
angular.forEach(input, function(friend){
if(utils.compareStr(friend.name, query) ||
utils.compareStr(friend.phone, query))
result.push(friend);
});
return result;
};
});
这样仅对对象进行一次迭代,然后按name
和比较phone
,就可以这样调用。
<li ng-repeat="friend in friends | friendFilter:query">
我compareStr
在另一个模块中定义了,但您实际上并不需要这样做。
angular.module('utils', [])
.factory('utils', function(){
return{
compareStr: function(stra, strb){
stra = ("" + stra).toLowerCase();
strb = ("" + strb).toLowerCase();
return stra.indexOf(strb) !== -1;
}
};
});
不要忘记将filters
模块注入您的应用程序
angular.module('app',['filters'])
这是完整的示例:http :
//jsbin.com/acagag/5/edit
问题内容: 我有一个对象: 我正在寻找一种本机方法,该方法类似于以下方法: JavaScript是否对对象具有这样的功能?(我想为Node.JS使用它,所以我不在乎跨浏览器的问题。) 问题答案: 该对象没有本地对象,但是如何处理: 但是您可以使用以下命令轻松地遍历对象: 更新资料 很多人提到,以前的方法不会返回新对象,而是对对象本身进行操作。为此,我想添加另一个解决方案,该解决方案返回一个新对象并
我试图通过嵌套的数组使用JSX映射代码。 这是: 以及迄今为止我提出的代码: 这就是我得到的错误: 我做错了什么?
我正在尝试将我的对象[]数组映射并过滤到int[]数组。如果对象是int,效果很好,但如果不是int,则抛出强制转换异常。我想知道我是否可以在lambda表达式中附加一个try/catch?这是我的代码: 或者更好的方法是试着抓住整个街区?
问题内容: 我试图映射对象数组,每个数组包含另一个嵌套的对象数组。但是,该映射不适用于嵌套数组。我如何在嵌套数组的内容上进行映射,同时使所有的父对象保持相同? 小提琴: https : //jsfiddle.net/69z2wepo/249197/ 数据结构如下: 地图看起来像 问题答案: 由于每个元素都有一个数组,因此您也必须结束。 例
使用一个函数将数组的值映射到对象,其键值对中,原始值作为键,映射值作为值。 使用一个匿名的内部函数作用域来声明一个 undefined 的内存空间,使用闭包来存储返回值。 使用一个新的 Array 来存储带有函数映射的数组和一个逗号运算符来返回第二个步骤,而不需要从一个上下文移动到另一个上下文(由于闭包和操作顺序)。 const mapObject = (arr, fn) => (a => (