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/
有没有办法在不创建新的数组和/或对象的情况下修改某个对象属性(就像我上面过滤掉的那个)?
期望的结果:[{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]
发布于 2013-05-22 20:32:16
当然,只要改变它:
使用jQuery的$.each
$.each(foo, function() {
if (this.bar === 1) {
this.baz[0] = 11;
this.baz[1] = 22;
this.baz[2] = 33;
// Or: `this.baz = [11, 22, 33];`
}
});使用ES5的forEach
foo.forEach(function(obj) {
if (obj.bar === 1) {
obj.baz[0] = 11;
obj.baz[1] = 22;
obj.baz[2] = 33;
// Or: `obj.baz = [11, 22, 33];`
}
});发布于 2020-03-20 17:21:17
带扩展(...)运算符的.map
var result = foo.map(el => el.bar == 1 ? {...el, baz: [11,22,33]} : el);
发布于 2018-04-16 15:32:39
您可以使用find并更改其属性。
let foo = [{ bar: 1, baz: [1,2,3] }, { bar: 2, baz: [4,5,6] }];
let obj = foo.find(f=>f.bar==1);
if(obj)
obj.baz=[2,3,4];
console.log(foo);
https://stackoverflow.com/questions/16691833
复制相似问题