AngularJS 中当我们需要遍历某个数组的时候, 我们会用到 forEach 语法. AngularJS 中 forEach 的用法如下:
- angular.forEach(array,function(obj,index){
- doSomething();
- })
array 表示需要遍历的数组, obj 表示遍历时的每个元素, index 表示遍历时元素的下标. index 不是必须的参数, 可以不写. 可以根据需要添加与否.
在写一个比较数组对象中是否存在一个对象, 存在返回 true, 失败返回 false. 在 return 时, 发现并没有退出方法, 自己测试了一下.
首先先写一个数组对象, 然后用 AngularJS 的 forEach 方法循环比较, 当存在名字为 2 的对象时, 输出 true 并返回, 否则输出 false 并返回.
- self.test = function() {
- var testArray = [{name: 1},{name:2},{name:3}];
- angular.forEach(testArray, function(value, key){
- if (value.name == 2) {console.log(true + 'pass the test');return;}
- console.log(value.name + 'pass');
- });
- console.log(false + 'pass the test');
- return false;
- }();
刚开始认为, 当找到 value.name == 2 的元素时, 方法就会直接返回, 所以应该只输出 1 pass,true pass the test 然后程序结束, 但输出结果却是这样的:
结果发现在 forEach 里的 return 居然只起到了 for 循环里的 continue 作用.
再把 forEach 循环的返回值和执行函数的返回值打印出来:
forEach 函数返回的是循环的数组, 函数的返回值是 false. 说明在 forEach 里 return 并没有奏效, 仅仅起到了 continue 的作用.
去网上搜了一下, 并没有原因说明..
解决方案: 用一个临时变量存储结果, 当条件成立相同时将结果改为 true:
- self.test = function() {
- var testArray = [{name: 1},{name:2},{name:3}];
- var result = false;
- angular.forEach(testArray, function(value, key){
- if (value.name == 2) {result = true;}
- });
- return result;
- };
- console.log(self.test());
这样虽然能获得正确的返回值, 但却无法阻止 forEach 的循环, 想来 forEach 应该是用在历遍数组元素来做一些操作, 像这样的应该用 for 循环比较好一些.
来源: http://www.jb51.net/article/148291.htm