2013-05-22 37 views
14
var foo = [{ bar: 1, baz: [1,2,3] }, { bar: 2, baz: [4,5,6] }]; 

var filtered = $.grep(foo, function(v){ 
    return v.bar === 1; 
}); 

console.log(filtered); 

http://jsfiddle.net/98EsQ/sở hữu đối tượng Modify trong một mảng của các đối tượng

Có cách nào để sửa đổi thuộc tính đối tượng nhất định (như một trong những tôi lọc ra ở trên) mà không cần tạo mảng và/hoặc các đối tượng mới?

kết quả mong muốn: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]

+0

@squint Tôi đang tìm kiếm một cuộc họp hod cho phép tôi "trỏ" vào một đối tượng nào đó và cho phép tôi thay đổi nó (hoặc trong ES hoặc jQuery). Nhưng tôi đoán tôi phải làm điều đó bằng tay với một foreach :) – Johan

Trả lời

15

Chắc chắn, chỉ cần thay đổi nó:

Với $.each jQuery:

$.each(foo, function() { 
    if (this.bar === 1) { 
     this.baz[0] = 11; 
     this.baz[1] = 22; 
     this.baz[2] = 33; 
    } 
}); 

Với forEach ES5 của:

foo.forEach(function(obj) { 
    if (obj.bar === 1) { 
     obj.baz[0] = 11; 
     obj.baz[1] = 22; 
     obj.baz[2] = 33; 
    } 
}); 

... hoặc bạn có other looping options in this other SO answer.

+0

Tôi đã không chắc chắn về việc liệu một cái gì đó "được xây dựng trong" tồn tại trong jQuery hoặc ES5. Nhưng tôi đoán không :) Cảm ơn T.J – Johan

1
$.each(foo,function(index,value) 
{ 
    if(this.bar==1) 
    { 
this.baz[0] = 11; 
     this.baz[1] = 22; 
     this.baz[2] = 33; 
    } 

}); 

nhưng đối với vòng lặp là nhanh hơn so với $ .each do đó, u có thể cố gắng sử dụng

for(var i=0; i <foo.length; i++) 
{ 

if(foo[i].bar==1) 
{ 
//change the code 
} 
} 
6

Nếu không có khả năng tương thích jQuery và ngược

for (var i = 0; i < foo.length; i++) { 
    if (foo[i].bar === 1) { 
     foo[i].baz = [11,12,13]; 
    } 
} 
2

Chúng tôi cũng có thể đạt được điều này bằng cách sử dụng bản đồ Array Avatar của chức năng:

foo.map((obj) => { 
    if(obj.bar == 1){ 
    obj.baz[0] = 11; 
    obj.baz[1] = 22; 
    obj.baz[2] = 33; 
    } 
}) 
Các vấn đề liên quan