javascript преобразование набора в строку через запятую - IE11 - PullRequest
0 голосов
/ 17 февраля 2020

У меня возникли проблемы с преобразованием Set в comma separated string в IE11, приведенное ниже прекрасно работает в chrome, но IE11 не нравится Array.from.

let a = new Set();
a.add("a");
a.add("b");

console.log(Array.from(a).join(","));

Чтобы обойти это, я делаю:

let aArray = [];                        
let pushToArray = function(val) {
  aArray.push(val);
};
a.forEach(pushToArray);

console.log(aArray.toString());

Любое предложение о том, как сделать выше, лучше работает в IE11?

1 Ответ

3 голосов
/ 17 февраля 2020

Может быть лучше, если вы даже не создадите массив из него, создайте только строку, используя конкатенацию:

let a = new Set();
a.add("a");
a.add("b");

function SetToString(set, delim){
  let str = '';
  set.forEach(function(elem){
    str += elem + delim
  });
  return str
}
console.log(SetToString(a, ','));

Единственная проблема с этим подходом состоит в том, что он добавляет запятую в конец также.

Чтобы избежать этого, у вас есть два способа:

  • Удалить последнюю запятую, используя .slice(0, -1)

    let a = new Set();
    a.add("a");
    a.add("b");
    
    function SetToString(set, delim){
      let str = '';
      set.forEach(function(elem){
        str += elem + delim
      });
      return str.slice(0, -1)
    }
    console.log(SetToString(a, ','));
    
  • Подсчитать количество элементов и пропустить запятую для последнего

    let a = new Set();
    a.add("a");
    a.add("b");
    
    function SetToString(set, delim){
      let str = '';
      let i = 0;
      let size = set.size;
      set.forEach(function(elem){
        str += elem
        if(i++ < size - 1) str += delim
      });
      return str
    }
    console.log(SetToString(a, ','));
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...