我想迭代数组的元素,如果条件为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!"
}
]
答案 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>