2016-03-10 15 views
8

Tôi muốn lặp qua các phần tử của một mảng và nếu điều kiện là đúng, tôi muốn tạo một mảng mới.

Ví dụ: Tôi có một mảng được gọi là Tin nhắn có phần tử là đối tượng và tôi muốn kiểm tra xem thuộc tính id bằng 5. Nếu có tạo một mảng mới chỉ bao gồm đối tượng này.

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]); 

Tôi muốn kết quả của tôi là:

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

câu hỏi của bạn là gì? Bạn có vấn đề gì không? – Nadir

+0

@Nadir Tôi nêu rõ kết quả của tôi cần là gì. Rõ ràng là tôi không thể đạt được nó. –

Trả lời

4

Cố gắng sử dụng Array.prototype.filter ở bối cảnh này,

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

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

Nếu bạn muốn nó được ngắn gọn hơn thì bạn có thể sử dụng ES6 Arrow function ,

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

Nhưng lưu ý rằng, các mã trên cũng tương tự như,

var message5 = messages.filter(function(itm){ 
    return itm.id == 5; 
}.bind(this)); //Arrow function will automatically bind its lexical scope to it. 
+0

Điều gì xảy ra nếu tôi muốn thông điệp của tôi5 là một đối tượng thay vì một mảng? –

+0

@mosmic Sau đó, cách tiếp cận cho điều đó sẽ khác. bạn có muốn tôi viết nó ngay bây giờ không? :) –

+0

Nếu bạn không phiền, nó sẽ rất hữu ích. –

2

cố gắng để sử dụng bộ lọc:

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

thử

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

    return value.id == 5; 

}); 
2

Sử dụng mảng lọc() phương pháp

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

Một cách tiếp cận hoàn toàn trong jQuery có thể là:

$(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>

+1

Đây là những gì tôi có trong đầu. Rõ ràng chức năng lọc đơn giản hóa mọi thứ, nhưng câu trả lời của bạn là rất hữu ích bởi vì tôi thấy lỗi của tôi bây giờ. –

Các vấn đề liên quan