为什么“ for of”有效而类似的无效?

时间:2019-06-18 19:16:07

标签: javascript ecmascript-6

我正在遍历数组,以角度转换字符串,但是只有'map'选项有效,'for'无效。

chart.categories = chart.categories.map(function (category) 
    return $translate.instant(category);
});
  

不工作

for (categorie of chart.categories) {
    categorie = $translate.instant(categorie);
}

另一方面,当我像这样遍历chart.series时,它会起作用:

for (serie of chart.series) {
    serie.name = $translate.instant(serie.name);
}

第二个是我翻译属性,而第一个是我翻译对象本身,这与事实有关吗?

编辑:

这是我的图表对象:

{
  "categories": [
    "JOSÉ HERLANI DA CRUZ",
    "Class"
  ],
  "series": [
    {
      "name": "Attendance Percentage in Class",
      "data": [
        100,
        100
      ]
    }
  ]
}

1 个答案:

答案 0 :(得分:4)

(for item of items)中,您无法更改item,因为item是新的局部变量,只有您要更改的局部变量。不是items中的on。您可以更改item.property,因为引用item仍在items

例如如果您有这样的话:

var a = 1;
var b = a;
b = 2;

console.log("a =", a);
console.log("b =", b);

b将是2,而a将仍然是1(不变)

但是如果您有这个:

var a = {}
a.x = 1;
var b = a;
b.x = 2;

console.log("a.x =", a.x);
console.log("b.x =", b.x);

a.xb.x均为2,因为它们引用相同。

我认为这也是您得出的结论

  

第二个是我翻译属性,而第一个是我翻译对象本身,这与事实有关吗?

这将起作用:

var newCategories = [];
for (categorie of chart.categories) {
    newCategories.push($translate.instant(categorie));
}
chart.categories = newCategories