在$ .each函数中使用条件来创建数组

Dim*_*kas 8 javascript arrays jquery

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

示例:我有一个名为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]);
Run Code Online (Sandbox Code Playgroud)

我希望我的结果是:

message5 = [
 {
  "id": 5,
  "body": "ciao!"
 }
]    
Run Code Online (Sandbox Code Playgroud)

Raj*_*amy 4

Array.prototype.filter尝试在这种情况下使用,

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

console.log(message5);  //[{"id": 5,"body": "ciao!"}] 
Run Code Online (Sandbox Code Playgroud)

如果你想让它更简洁,那么你可以使用 ES6 Arrow function

var message5 = messages.filter(itm => itm.id == 5);
console.log(message5);  //[{"id": 5,"body": "ciao!"}]
Run Code Online (Sandbox Code Playgroud)

但请注意,上面的代码类似于,

var message5 = messages.filter(function(itm){
  return itm.id == 5;
}.bind(this)); //Arrow function will automatically bind its lexical scope to it.
Run Code Online (Sandbox Code Playgroud)