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

时间:2016-03-10 13:15:44

标签: javascript jquery arrays

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

示例:我有一个名为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!"
 }
]    

5 个答案:

答案 0 :(得分:4)

尝试在此背景下使用Array.prototype.filter

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

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

如果您希望它更简洁,那么您可以使用ES6 Arrow function

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.

答案 1 :(得分:2)

尝试使用过滤器:

var messages = [{
  "id": 10,
  "body": "hello!"
}, {
  "id": 21,
  "body": "holla!"
}, {
  "id": 5,
  "body": "ciao!"
}];
var message5 = messages.filter(function(message) {
  return message.id == 5;
});
alert(JSON.stringify(message5));

答案 2 :(得分:2)

var newArr = messages.filter( function(value){

   return value.id == 5;

} );

答案 3 :(得分:2)

使用Array filter()方法

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

答案 4 :(得分:2)

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

$(function () {
  var messages = [{
    "id": 10,
    "body": "hello!"
  }, {
    "id": 21,
    "body": "holla!"
  }, {
    "id": 5,
    "body": "ciao!"
  }];
  var dataObj = [];

  $.each(messages, function (index, value) {
    if (value.id == 5) {
      dataObj.push(messages[index]);
    }
  });
  $('#result').text(JSON.stringify(dataObj, 4, 4));
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>


<textarea id="result" style="width: 250px;height: 100px"></textarea>