Joh*_*han 28 javascript jquery
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);
Run Code Online (Sandbox Code Playgroud)
有没有办法在不创建新数组和/或对象的情况下修改某个对象属性(就像我上面过滤的那个)?
期望的结果: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]
Pio*_*rek 41
.map使用扩展( ...) 运算符
var result = foo.map(el => el.bar == 1 ? {...el, baz: [11,22,33]} : el);
T.J*_*der 27
当然,只需改变它:
使用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];`
}
});
Run Code Online (Sandbox Code Playgroud)
使用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];`
}
});
Run Code Online (Sandbox Code Playgroud)
没有jQuery和向后兼容性
for (var i = 0; i < foo.length; i++) {
if (foo[i].bar === 1) {
foo[i].baz = [11,12,13];
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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);Run Code Online (Sandbox Code Playgroud)
const objArr = [
{prop1: 'value1', prop2: 'value11'},
{prop1: 'value2', prop2: 'value22'},
{prop1: 'value3', prop2: 'option33'},
{prop1: 'value4', prop2: 'option44'}
]
const newObjArr = objArr.map(obj => {
if (['value1', 'value2'].includes(obj.prop1)) {
return {...obj, prop1: 'newValue'}
}
return obj
}
)
// const responseGotten = [
// { prop1: 'newValue', prop2: 'value11' },
// { prop1: 'newValue', prop2: 'value22' },
// { prop1: 'value3', prop2: 'option33' },
// { prop1: 'value4', prop2: 'option44' }
// ]
Run Code Online (Sandbox Code Playgroud)
我们也可以通过使用Array的map函数来实现:
foo.map((obj) => {
if(obj.bar == 1){
obj.baz[0] = 11;
obj.baz[1] = 22;
obj.baz[2] = 33;
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51281 次 |
| 最近记录: |