在JavaScript

时间:2015-12-31 04:57:31

标签: javascript

我正在尝试从JavaScript对象中组装某个字符串并遇到一些问题。

我创建了一个接受对象的函数,并且应该返回字符串。初始对象如下所示:

var testObject = {
  "Topics": ["Other", "New1"],
  "Other": ["try this", "this also"]
};

我希望字符串吐出来:

"Topics~~Other|Topics~~New1|Other~~try this|Other~~this also"

以下是我现在所拥有的:



var testObject = {
  "Topics": ["Other", "New1"],
  "Other": ["try this", "this also"]
};

function transformObjectToString(activeFilters) {
  var newString = "";

  var checkFilterGroups = function(filterTopic) {
    activeFilters[filterTopic].map(function(selectedFilter) {
      var tempString = filterTopic + "~~" + selectedFilter + "|";
      console.log("check string", tempString);
      newString.concat(tempString);
    });
  }

  for (var filterGroup in activeFilters) {
    checkFilterGroups(filterGroup);
  }

  return newString;

}

console.log(transformObjectToString(testObject));




当我检查日志时,临时字符串似乎格式正确,但是,无论出于何种原因,concat看起来都没有像我想象的那样工作。

3 个答案:

答案 0 :(得分:4)

您应该只能使用 SpannableString hashText = new SpannableString("I just watched #StarWars and it was incredible. It's a #MustWatch #StarWars"); Matcher matcher = Pattern.compile("#([A-Za-z0-9_-]+)").matcher(hashText); while (matcher.find()) { hashText.setSpan(new ForegroundColorSpan(Color.parseColor("#000763")), matcher.start(), matcher.end(), 0); String tag = matcher.group(0); } holder.caption.setText(hashText); //I need to set an OnClick listener to all the Hashtags recognised ,因为这只是字符串连接。然后,你所要做的就是删除最后一个字符。这是一个改变https://jsfiddle.net/tfs98fxv/37/的JSFiddle。

答案 1 :(得分:1)

您可以使用.join('|')



var testObject = {
  "Topics": ["Other", "New1"],
  "Other": ["try this", "this also"]
};

function transformObjectToString(activeFilters) {
  var strings = [];

  var checkFilterGroups = function(filterTopic) {
    activeFilters[filterTopic].map(function(selectedFilter) {
      var tempString = filterTopic + "~~" + selectedFilter;
      strings.push(tempString);
    });
  }

  for (var filterGroup in activeFilters) {
    checkFilterGroups(filterGroup);
  }

  return strings.join('|');

}

console.log(transformObjectToString(testObject));




答案 2 :(得分:1)

newString = newString.concat(tempString);

这也有效。

编辑:这是如何工作的,首先将newString设置为null,因此在第一次循环时为null + tempstring,然后将newSting设置为值,在第二次循环时设置值+ tempString,依此类推。最后,你将在一个变量中使用连接的字符串,然后返回。

编辑:编辑: 还有@jfriend00在评论中说的,同上

  

.concat()返回一个新字符串,所以newString.concat(tempString);不是   完成任何事情,因为你没有将结果分配给   newString。请记住,Javascript中的字符串是不可变的,所以任何   修改总是会创建一个新字符串