Почему работает один для, а другой нет? - PullRequest
1 голос
/ 18 июня 2019

Я перебираю массив, переводя строки в угловые, но работает только опция '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);
}

Имеет ли это какое-либо отношение к тому факту, что во втором для меня переводится свойство, а в первом - для перевода самого объекта?

Edit:

Вот мой объект диаграммы:

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

1 Ответ

4 голосов
/ 18 июня 2019

В (for item of items) вы не можете изменить item, так как элемент - это новая локальная переменная, и только она меняется. Не включен в items. Вы можете изменить 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.x и b.x равны 2, поскольку они ссылаются на одно и то же.

Я думаю, что это также то, что вы сделали с

Имеет ли это какое-либо отношение к тому факту, что во втором для меня переводится свойство, а во втором - для перевода самого объекта?

это будет работать:

var newCategories = [];
for (categorie of chart.categories) {
    newCategories.push($translate.instant(categorie));
}
chart.categories = newCategories 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...