2017-02-20 61 views
0

试图变异for循环中的对象。对象不可变异

我期待console.log(dish)记录dish对象与ingredients属性包含一个未移动的ingredient s数组。

当我登录dish.ingredients时,它记录配料。

当我登录dish时,它会记录没有配料的dish对象。

这是为什么?

for (let dish of dishArray) { 
    dish['ingredients'] = [] 
    for (let ingredient of ingredientsArray) { 
    if (dish._id.equals(ingredient._dishID)) { 
     dish['ingredients'].unshift(ingredient) 
    } 
    } 
    console.log(dish['ingredients'])    <------------- 
    console.log(dish)       <-------------   
} 

dishArray是从猫鼬查询返回dish对象的数组。

+0

什么的'dishArray',和你有什么期望输出的价值?它看起来像是在'dish ['ingredients']'上做了console.log,但是把'dish'推到'newDishArray',这是为了什么呢? –

+0

@DanielT。有任何想法吗 ? – softcode

+0

我问你两个问题,除非你回答他们,否则我无能为力。 –

回答

0

没有你的代码的进一步了解,普通的JavaScript ==将做的工作

var dishArray = [{ 
 
    _id: '0' 
 
}, { 
 
    _id: '1' 
 
}]; 
 
var ingredientsArray = [{ 
 
    _id: '0', 
 
    _dishID: '0' 
 
}, { 
 
    _id: '1', 
 
    _dishID: '1' 
 
}]; 
 

 
for (let dish of dishArray) { 
 
    dish['ingredients'] = []; 
 

 
    for (let ingredient of ingredientsArray) { 
 
    if (dish._id == ingredient._dishID) { 
 
     dish['ingredients'].unshift(ingredient); 
 
    } 
 
    } 
 

 
    console.log(dish['ingredients']); 
 
    console.log(dish); 
 
}

+0

原来这是返回的猫鼬对象,不友好的突变 – softcode

+0

然后,也许你可以试着依靠提供的答案在这里lean()或toObject()你的Mongoose对象:http://stackoverflow.com/questions/7503450/how-do-you-turn-a-mongoose-document-into-a-plain-object – rdlopes

+0

Yep'lean()'解决了它。要尽快写下来。 – softcode

相关问题