Javascript 在$内使用条件。每个函数创建数组

Javascript 在$内使用条件。每个函数创建数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我想迭代数组的元素,如果条件为真,我想创建一个新数组 示例:我有一个名为Messages的数组,其元素是对象,我想检查id属性是否等于5。如果是,则创建仅包含此对象的新数组 messages = [{ "id": 10, "body": "hello!" }, { "id": 21, "body": "hola!" }, { "id": 5, "body": "ciao!" }]; var message5 = []; var dataObj = {}; $.each

我想迭代数组的元素,如果条件为真,我想创建一个新数组

示例:我有一个名为Messages的数组,其元素是对象,我想检查id属性是否等于5。如果是,则创建仅包含此对象的新数组

messages = [{
  "id": 10,
  "body": "hello!"
}, {
  "id": 21,
  "body": "hola!"
}, {
  "id": 5,
  "body": "ciao!"
}];

var message5 = [];
var dataObj = {};

$.each(messages, function(index, value) {
  if (value.id == 5) {
    dataObj[index] = value;
  }
});

message5.push(dataObj[index]);
我希望我的结果是:

message5 = [
 {
  "id": 5,
  "body": "ciao!"
 }
]    

在此上下文中尝试使用
Array.prototype.filter

var message5 = messages.filter(function(itm){
  return itm.id == 5;
});

console.log(message5);  //[{"id": 5,"body": "ciao!"}] 
如果您希望它更简洁,那么可以使用ES6
箭头函数

var message5 = messages.filter(itm => itm.id == 5);
console.log(message5);  //[{"id": 5,"body": "ciao!"}]
但请注意,上述代码类似于

var message5 = messages.filter(function(itm){
  return itm.id == 5;
}.bind(this)); //Arrow function will automatically bind its lexical scope to it.
尝试使用筛选器:

var消息=[{
“id”:10,
“身体”:“你好!”
}, {
“id”:21,
“身体”:“你好!”
}, {
“id”:5,
“身体”:“再见!”
}];
var message5=messages.filter(函数(消息){
返回message.id==5;
});
警报(JSON.stringify(message5))试试看

使用数组筛选器()方法


完全使用jQuery的方法可以是:

$(函数(){
变量消息=[{
“id”:10,
“身体”:“你好!”
}, {
“id”:21,
“身体”:“你好!”
}, {
“id”:5,
“身体”:“再见!”
}];
var dataObj=[];
$.each(消息、函数(索引、值){
如果(value.id==5){
数据对象推送(消息[索引]);
}
});
$('#result').text(JSON.stringify(dataObj,4,4));
});


您的问题是什么?“你做这件事有什么问题吗?”我在底部陈述了我的结果。很明显,我无法做到。这是我的想法。显然,过滤功能简化了一切,但您的回答非常有用,因为我现在看到了我的错误。如果我希望我的message5是一个对象而不是一个数组,该怎么办?@mosmic,那么解决方法就不同了。你想让我现在就写吗?:)@mosmic你能告诉我预期的结果是什么吗?只需给出一个示例
message5={{“id”:5,“body”:“ciao!”}
var newArr = messages.filter( function(value){

   return value.id == 5;

} );
messages.filter(function(msg){return msg['id'] === 5})