用Javascript替换数组元素会产生意外结果

时间:2018-12-05 19:56:12

标签: javascript

我正尝试用其替代项(特定对象)替换数组元素(通用对象),但原始数组中的对象保持不变。

class SpecificObject{
}

this.Objects = [{},{}];

this.Objects.map((signer,index) => {
   //convert json generics to js objects
   this.Objects[index] = new SpecificObject(signer);
});

console.log(this.Objects);

不确定代码片段是否正确说明了问题,但我希望看到的是:

[
SpecificObject{},
SpecificObject{}
]

我什至尝试克隆原始对象来进行迭代,但这没有帮助。必须缺少一些愚蠢的东西。有没有办法用lodash实现我所需要的?

编辑(遵循建议提示): 现在,我执行以下操作:

console.log('signers-before', this.Signers);
this.Signers.map(signer => new SigningTableSigner(signer));
console.log('signers-after',this.Signers);

这就是我在日志中得到的(对象仍然保持通用):

enter image description here

Edit2

糟糕,我忘记了作业。 this.Signers =

现在这样,一切都会按预期进行:

console.log('signers-before', this.Signers);
this.Signers = this.Signers.map(signer => new SigningTableSigner(signer));
console.log('signers-after',this.Signers);

3 个答案:

答案 0 :(得分:3)

迭代时无需修改集合。只需从map返回对象即可。

this.Objects = this.Objects.map((signer,index) => new SpecificObject(signer));

答案 1 :(得分:2)

要在要返回数组时使用Map。您可以只使用forEach来完成您想做的事情。但是我认为这样会更好

this.Objects = this.Objects.map(signer => new SpecificObject(signer))

答案 2 :(得分:1)

您没有正确使用map。您应该只是在箭头函数内返回对象。 map实际上返回新数组,其中包含通过应用您提供的函数创建的元素。因此,您还必须重新分配this.Objects的结果。

this.Objects = this.Objects.map(signer => {
   //convert json generics to js objects
   return new SpecificObject(signer);
})