[英]Modify object property in an array of objects
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/ http://jsfiddle.net/98EsQ/
Is there any way to modify a certain objects property (like the one I'm filtering out above) without creating new arrays and/or objects?有没有什么方法可以在不创建新的 arrays 和/或对象的情况下修改某个对象属性(比如我在上面过滤掉的属性)?
Desired result: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]
期望的结果:
[{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]
Sure, just change it:当然,只需更改它:
With jQuery's $.each
:使用 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];`
}
});
With ES5's forEach
:使用 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];`
}
});
...or you have other looping options in this other SO answer . ...或者您在这个其他 SO 答案中有其他循环选项。
.map
与展开( ...
) 运算符
var result = foo.map(el => el.bar == 1 ? {...el, baz: [11,22,33]} : el);
We can also achieve this by using Array's map function:我们也可以通过使用 Array 的 map 函数来实现:
foo.map((obj) => {
if(obj.bar == 1){
obj.baz[0] = 11;
obj.baz[1] = 22;
obj.baz[2] = 33;
}
})
Without jQuery and backwards compatibility没有 jQuery 和向后兼容性
for (var i = 0; i < foo.length; i++) {
if (foo[i].bar === 1) {
foo[i].baz = [11,12,13];
}
}
$.each(foo,function(index,value)
{
if(this.bar==1)
{
this.baz[0] = 11;
this.baz[1] = 22;
this.baz[2] = 33;
}
});
but for loop is faster than $.each so u can try to use但是 for 循环比 $.each 快,所以你可以尝试使用
for(var i=0; i <foo.length; i++)
{
if(foo[i].bar==1)
{
//change the code
}
}
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' }
// ]
But before opting any of the mentioned techniques please keep in mind the performance challenges associated with each of the approach.但在选择任何提到的技术之前,请记住与每种方法相关的性能挑战。
Object iterate For-In, average: ~240 microseconds.
Object iterate Keys For Each, average: ~294 microseconds.
Object iterate Entries For-Of, average: ~535 microseconds.
Reference - 3 JavaScript Performance Mistakes You Should Stop Doing参考 - 你应该停止做的 3 个 JavaScript 性能错误
You can make use of filter function of javascript.您可以利用javascript的过滤功能。
obj = [ {inActive:false, id:1}, {inActive:false, id:2}, {inActive:false, id: 3} ]; let nObj = obj.filter(ele => { ele.inActive = true; return ele; }); console.log(nObj);
You can modify the array by using simple for loop您可以使用简单的 for 循环修改数组
var foo = [{ bar: 1, baz: [1,2,3] }, { bar: 2, baz: [4,5,6] }]; for(i = 0;i < foo.length;i++){ //Here your confition for which item you went to edit if(foo[i].bar == 1){ //Here you logic for update property foo[i].baz= [1,11,22] } } console.log(foo);
you can play around:你可以玩:
const tasks = [ { id: 1, done: false }, { id: 2, done: false } ] const completed_task = { id: 1, done: true } const markCompleted = (tasks, task) => { const index = tasks.findIndex(t => t.id === task.id); tasks.splice(index, 1); tasks.push(task); return tasks; } console.log(tasks) console.log(markCompleted(tasks, completed_task))
EDIT编辑
to avoid index change:避免索引更改:
const markCompleted = (tasks, task) => {
const index = tasks.findIndex(t => t.id === task.id);
tasks[index] = task;
return tasks;
}
let myArray = [
{ id: 1, body: "wash dishes", state: "done" },
{ id: 2, body: "wash car", state: "onGoing" },
{ id: 3, body: "wash hands", state: "done" },
]
myArray.findIndex(function(obj){ //it will search between every object in array
if (obj.body=="wash car"){ //find the object you looking for and pass to obj
obj.state = "done" // you can select and update any part you want here
}
console.log(myArray) // see the updatet array
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.