Javascript 按筛选器在对象中查找项

Javascript 按筛选器在对象中查找项,javascript,angularjs,Javascript,Angularjs,我的目标如下: lstMsg = { "count": 6, "next": null, "previous": null, "results": [{ "id": 3, "sender": 2, "receiver": { "id": 4, "username": "ghazan", "first_name": "ghazan", "last_name": "ghazan"

我的目标如下:

lstMsg = {
  "count": 6,
  "next": null,
  "previous": null,
  "results": [{
      "id": 3,
      "sender": 2,
      "receiver": {
        "id": 4,
        "username": "ghazan",
        "first_name": "ghazan",
        "last_name": "ghazan"
      },
      "title": "salam",
      "body": "reza khoobi",
      "created_time": "20-6-1394 15:42:34.647251"
    },
    {
      "id": 2,
      "sender": 2,
      "receiver": {
        "id": 4,
        "username": "ghazan",
        "first_name": "ghazan",
        "last_name": "ghazan"
      },
      "title": "reis",
      "body": "salam reis",
      "created_time": "20-6-1394 15:41:49.512305"
    },
    {
      "id": 1,
      "sender": 2,
      "receiver": {
        "id": 4,
        "username": "ghazan",
        "first_name": "ghazan",
        "last_name": "ghazan"
      },
      "title": "shaftan",
      "body": "saalam",
      "created_time": "20-6-1394 15:41:38.626508"
    }
  ]
}
我正在尝试查找一个特定项目(即id为2的项目),并在以下位置使用筛选器:

但是它总是返回第一个项目,不管我在寻找哪个
id

我想知道我哪里做错了?

试试这个:


在Javascript中,您可以使用数组中的filter函数在数组中进行过滤

在控制器内部的Angularjs函数中

$scope.lstMsg = [{},{},{}]; // Array of objects.
$scope.search = function (value) {
    return $scope.lstMsg.results.filter(function (e) { // Where e is equal an object of $scope.lstMsg array.
        return e.id == value;
    });
};
上面的函数将返回一个与filter函数匹配的对象数组

通过使用:

$scope.found = $scope.search(msg_id)[0]; // $scope.found is the object properly.
我已经使用纯javascript制作了第一个演示

(函数(){
var lstMsg={
“计数”:6,
“下一个”:空,
“先前”:空,
“结果”:[{
“id”:3,
“发送者”:2,
“接收人”:{
“id”:4,
“用户名”:“ghazan”,
“名字”:“ghazan”,
“姓”:“ghazan”
},
“头衔”:“萨拉姆”,
“身体”:“reza khoobi”,
“创建时间”:“20-6-1394 15:42:34.647251”
}, {
“id”:2,
“发送者”:2,
“接收人”:{
“id”:4,
“用户名”:“ghazan”,
“名字”:“ghazan”,
“姓”:“ghazan”
},
“标题”:“reis”,
“正文”:“salam reis”,
“创建时间”:“20-6-1394 15:41:49.512305”
}, {
“id”:1,
“发送者”:2,
“接收人”:{
“id”:4,
“用户名”:“ghazan”,
“名字”:“ghazan”,
“姓”:“ghazan”
},
“头衔”:“沙夫坦”,
“主体”:“萨拉姆”,
“创建时间”:“20-6-1394 15:41:38.626508”
}]
};
函数搜索(值){
返回lstMsg.results.filter(函数(e){
返回e.id==值
});
}
控制台日志(搜索(2)[0]);

})();
您可以使用一个简单的
for
循环,然后对id进行筛选。由于不知道具体在筛选之后要做什么,我给出了两个示例,分别是向和
innerHTML
元素追加数据,或
push
-ing向循环外的数组追加数据

function showMessage() {
  var p1 = document.getElementById("result_body");
  var p2 = document.getElementById("result_title");
  for (var i = 0; i < lstMsg.results.length; i++) {
    if (lstMsg.results[i].id === 2) {
      //SIMPLE OUTPUT FOR DEMO
      p1.innerHTML = lstMsg.results[i].body;
      p2.innerHTML = lstMsg.results[i].title;
      //COULD USE AN PUSH TO AN ARRAY
      someArray.push(lstMsg.results[i].body);
      someArray.push(lstMsg.results[i].title);
    }
  }
}
函数showMessage(){
var p1=document.getElementById(“结果体”);
var p2=document.getElementById(“结果标题”);
对于(var i=0;i
found[0]将返回第一项。@DannyFardyJhonstonBermúdez Yes。但是如果过滤器按照它的预期工作,那么在
found
中只有一个项目可以很好地将其粘贴到plunker中。不知道为什么有这么多全局变量。创建一个复制的演示issue@AlexJolig您可以使用普通javascript中的筛选函数筛选对象。@DannyFardyJhonstonBermúdez是的,您可以,但是$filter也可以如图所示工作。。没有任何更改。还有别的问题
$scope.found = $scope.search(msg_id)[0]; // $scope.found is the object properly.
function showMessage() {
  var p1 = document.getElementById("result_body");
  var p2 = document.getElementById("result_title");
  for (var i = 0; i < lstMsg.results.length; i++) {
    if (lstMsg.results[i].id === 2) {
      //SIMPLE OUTPUT FOR DEMO
      p1.innerHTML = lstMsg.results[i].body;
      p2.innerHTML = lstMsg.results[i].title;
      //COULD USE AN PUSH TO AN ARRAY
      someArray.push(lstMsg.results[i].body);
      someArray.push(lstMsg.results[i].title);
    }
  }
}