Как удалить разделитель запятой в этом массиве?

Итак, для начала у меня есть:

var tempArray = [];
tempArray.push(get);

В этом случае переменная get захватывает HTML-код клонированного элемента div.

Что я пробовал последнее:

tempArray.push(get);

var myJSONString = JSON.stringify(tempArray);

var parseString = $.parseJSON(myJSONString);

var finalString = myJSONString.replace(/\r?\\n/g, '').replace(/\\/g, '').replace(/^\[(.+)\]$/,'$1').replace (/(^")|("$)/g, '');

var joinString = tempArray.join(",");

А потом:

// Save
localStorage.setItem('sessions', finalString);

Что я всегда получаю:

tempArray[div "," div]

Я объявил массив вне функции как:

var tempArray = [];

Я помещаю содержимое в массив здесь:

  // Decide to add or remove
  if(box.hasClass("selected")){
    console.log("Add to array")
    tempArray.push(get);

    // Add to favorites tab
    favoriteTab.append(boxContent);

  }

Полный JS

console.clear();
//localStorage.setItem('sessions', "");

var tempArray = [];

// Clones
$('div.tab-pane').on('click', '.favorite', function(e) {
  e.preventDefault();

  // Elements we play with... Having significative variable names.
  var heartLink = $(this);
  var box = heartLink.parent('.box');
  var container = box.parent('.box-container');
  var favoriteTab = $("#fav .spaces");

  // I don't know what is the use for those 3 lines below.
  var idFind = box.attr("id");
  var idComplete = ('#' + idFind);
  console.log(idComplete);

  //TOGGLE FONT AWESOME ON CLICK
  heartLink.find('i').toggleClass('fa-heart fa-heart-o'); // .selected or not, you need those 2 classes to toggle.
  box.toggleClass("selected not-selected"); // Toggle selected and not-selected classes

  // Clone div
  var boxContent = container.clone(true, true);

  // Change the id
  var thisID = boxContent.attr("id")+"_cloned";
  boxContent.attr("id", thisID);

  // Get the html to be saved in localstorage
  var get = boxContent.wrap('<p>').parent().html();
  get = get.replace(/\r?\n/g, "").replace(/>\s*</g, "><"); // remove line feeds and spaces
  console.log(get);
  boxContent.unwrap();

  // Decide to add or remove
  if(box.hasClass("selected")){
    console.log("Add to array")
    tempArray.push(get);

    // Add to favorites tab
    favoriteTab.append(boxContent);

  }else{
    console.log("Remove from array");
    var index = tempArray.indexOf(get);
    tempArray.splice(index);

    // Remove from favorite tab
    favoriteTab.find("#"+thisID).remove();
  }

  // Save
  localStorage.setItem('sessions', tempArray);

});

// Append item if localstorage is detected
if (localStorage["sessions"]) {
  $("#fav .spaces").append(localStorage["sessions"]);
  console.log( localStorage.getItem('sessions') );
}

Полный html

<section id="speakers-programme">
  <div class="container">
    <div class="tabs_main">

      <div class="col-md-5"><a data-target="#mon" class="btn active" data-toggle="tab">Monday</a></div>
      <div class="col-md-5"><a data-target="#tue" class="btn active" data-toggle="tab">Tuesday</a></div>
      <div class="col-md-2"><a data-target="#fav" class="btn active" data-toggle="tab"><i class="fa fa-heart" aria-hidden="true"></i></a></div>

    </div>

    <div class="tab-content">
      <div class="tab-pane active" id="mon">
        <br>
        <div class="spaces">
          <div class="box-container">
            <div class="box not-selected" id="box1">
              <span>1</span>
              <a href="#" class="favorite"><i class="fa fa-heart-o" aria-hidden="true"></i></a>
            </div>
          </div>
          <div class="box-container">
            <div class="box not-selected" id="box2">
              <span>2</span>
              <a href="#" class="favorite"><i class="fa fa-heart-o" aria-hidden="true"></i></a>
            </div>
          </div>
        </div>
      </div>

      <div class="tab-pane active" id="tue">
        <br>
        <div class="spaces">
        </div>
      </div>

      <div class="tab-pane active" id="fav">
        <br>
        <div class="spaces">
        </div>
      </div>

    </div>
  </div>
</section>

Скрипт: https://codepen.io/Bes7weB/pen/NvQQMN?editors=0011< /а>

Итак, в этом примере, если вы нажмете на вкладку «Понедельник» и нажмете на оба сердца, родительский div будет клонирован на вкладку «Избранное», а затем, если вы обновите страницу, вы увидите оба div с запятой на середина.

Любая помощь приветствуется, большое спасибо!


person catarina melim    schedule 11.09.2017    source источник
comment
join действительно не влияет на массив. Он возвращает новую строку.   -  person Bergi    schedule 11.09.2017
comment
Пожалуйста, опубликуйте конкретный код, который имеет проблему в вашем вопросе, а не просто ссылку на него. Где и как вы используете tempArray, чтобы получить эту нежелательную запятую?   -  person Bergi    schedule 11.09.2017
comment
Я обновил вопрос @Bergi   -  person catarina melim    schedule 11.09.2017
comment
Ах, вы используете localStorage. Проблема в том, что он не хранит объекты, он хранит строки - и ваш массив неявно становится строковым с помощью стандартного метода, который дает разделитель запятой. Вместо этого вы захотите явно использовать JSON.stringify и JSON.parse.   -  person Bergi    schedule 11.09.2017
comment
Хорошо я понял. Я пробовал таким образом, но в конце все еще есть запятая для удаления, и я не знаю, как это сделать ... не могли бы вы показать мне, как это сделать? Спасибо. @Берги   -  person catarina melim    schedule 11.09.2017
comment
Пожалуйста, отредактируйте свой пост, чтобы показать, как вы его пробовали.   -  person Bergi    schedule 11.09.2017
comment
Я обновил вопрос. У меня очень сжатые сроки, поэтому, если бы вы могли помочь как можно скорее, это было бы здорово @Bergi   -  person catarina melim    schedule 11.09.2017
comment
Что ты собирался делать с parseString, finalString, joinString?! Просто сохраните myJSONString и покончите с этим. Затем при обращении к памяти нужно сделать JSON.parse(localStorage.getItem(…)).   -  person Bergi    schedule 12.09.2017


Ответы (1)


вам нужно обновить массив, взгляните на приведенный ниже пример

let arr = [1, 2];
arr.join(' ');

console.log(arr);

arr = arr.join(' ');

console.log(arr);

person marvel308    schedule 11.09.2017
comment
Благодарю за ваш ответ. Это имеет смысл. Однако после изменения моего кода на tempArray = tempArray.join(' '); это дает мне сообщение об ошибке: tempArray.push не является функцией. У вас есть идеи, почему я получаю эту ошибку? - person catarina melim; 11.09.2017
comment
stackoverflow .com/questions/1424710/ - person marvel308; 11.09.2017
comment
Я отметил ваш ответ как правильный, потому что он заставил меня увидеть, как все работает в этом случае ... но на самом деле я еще не мог заставить его работать. Можешь взглянуть? codepen.io/Bes7weB/pen/NvQQMN?editors=0011 Итак, если вы нажимаете на вкладку «Понедельник» и нажимаете на оба сердца, родительские элементы div будут клонированы на вкладку «Избранное», а затем, если вы обновите страницу, вы увидите оба элемента div с запятой посередине. Пожалуйста, помогите :) @marvel308 - person catarina melim; 11.09.2017
comment
Я хотел бы взглянуть через некоторое время, вы можете попробовать спросить в codereview.stackexchange.com , вы можете найти большую помощь их - person marvel308; 11.09.2017