Javascript 在$内使用条件。每个函数创建数组
我想迭代数组的元素,如果条件为真,我想创建一个新数组 示例:我有一个名为Messages的数组,其元素是对象,我想检查id属性是否等于5。如果是,则创建仅包含此对象的新数组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": 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})