什么是AngularJS中SQL IN语句的等价物?

时间:2017-03-13 17:07:20

标签: javascript angularjs

我对AngularJS很陌生,我试图找出如何应用过滤器,其中记录ID是数组中的ID列表之一。在SQL中,它将类似于:

SELECT * from Table1 where Table1.ID in (1,2,3,4,5)

我如何在AngularJS中完成同样的事情?我知道我需要应用过滤,但是如何?

3 个答案:

答案 0 :(得分:1)

如果您正在寻找一种控制器/服务方法,它会过滤掉您阵列中的某些记录 可以使用普通的javascript。在这里,我使用了数组实现的filter()方法,更多细节here

var data = [1,2,3,4,5,6,7,8,9];
var inStatementData = [3,6,7];

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

var resultArray= data.filter(function(value){
    return isInArray(value, inStatementData);
});

 //resultArray will be [3,6,7]

答案 1 :(得分:1)

您可以使用{J} filtersome的组合使用纯Javascript。

实施例:

let a = [{id: 1, val: 'aaa'},
         {id: 2, val: 'bbb'},
         {id: 3, val: 'ccc'},
         {id: 4, val: 'ddd'},
         {id: 5, val: 'eee'},
         {id: 6, val: 'fff'},
         {id: 7, val: 'ggg'},
         {id: 8, val: 'hhh'}];

let b = [1,2,5,6];

let result = a.filter(x => b.some(y => y === x.id));

结果(字符串化):

[{"id":1,"val":"aaa"},{"id":2,"val":"bbb"},{"id":5,"val":"eee"},{"id":6,"val":"fff"}]

在ES5中你写道:

var result = a.filter(function(x) { return b.some(function(y) { return y === x.id; }); });

答案 2 :(得分:1)

使用ng-repeat with filters

JS中的SQL对象:

<div ng-repeat="result in results | filter: { id: 1} | filter: { id: 2}">
<span>{{result.name}}</span>
<span>{{result.job}}</span>
</div>

HTML:

$scope.idFilter = function (result) { 
var myArray = [ 1, 2, 3, 4, 5 ];
if($.inArray(result, myArray) !== -1){
      return result;
   }
};

您还可以使用角度函数使其更清晰:

JS:

<div ng-repeat="result in results | filter: idFilter">

HTML:

Width="0" Height="0"