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);
}
}
}