显示带有空格和 JSX 的数组

Posted

技术标签:

【中文标题】显示带有空格和 JSX 的数组【英文标题】:Displaying array with spaces and JSX 【发布时间】:2020-01-26 02:08:38 【问题描述】:

这是我编写的代码。 说有一句话“你好,请以@followme的身份关注我们”。这个函数将做的是找到包含“@”的单词,然后再次返回该句子,尽管 @ 将被链接。如果我使用 .join(" ") 加入此数组,则 JSX 元素将显示为 [object, object] 因此作为修复,我已在数组中每隔一个索引添加一个空格。

我的问题是这行得通吗?我是否错过了一些如此简单的事情,可以让我的生活更轻松,很想知道!谢谢

---- 作为一个编辑,如果我没有在数组中添加额外的空格或不使用 .join,那么这句话实际上就是一个词......

const getInstagram = props => 
  //Split sentence into an array
  let test = props.split("@" +1).pop().split(" ");
  let one;

//Get the word that contains @
  test.map(word => 
    if (word.includes("@")) 
      one = word;
    
  );


  //Gets the array position
  let position = test.indexOf(one);
  test.splice(position);

  if (position >= 0) 
    let line = <a href=`https://instagram.com/$one`>one</a>
    test.splice(position,0,line)    
  

  for(let i = 0; i < test.length; i++) 
    test.splice(i++,0, " ");
  

    return (
      <p style= opacity: 1 >
      test
      console.log(test)
      </p>
    );  
 ;

【问题讨论】:

我相信会有很多替代方法以另一种方式完成您正在做的事情(分割空间,然后在另一个循环中添加空间,或者在循环中渲染时间)。我认为不会有更清洁的方法。只是我的 2 美分。 【参考方案1】:

另一种方法是保留输入短语的空白,允许提取“@anchors”并将其包装在&lt;a&gt; 元素中,该方法是通过for-loop 扫描输入字符串并提取和包装锚子字符串为他们遇到如下:

function ExtractAnchors(phrase) 

  const parts = [];

  /* Iterate characters of phrase */
  for (let i = 0, j = 0; j < phrase.length; j++) 

    /* If character is "@", extract the anchor */
    if (phrase[j] === "@") 

      /* Add string from prior index to start of anchor */
      parts.push(phrase.substring(i, j));

      /* Find end-index of the anchor */
      let k = j;
      while (k < phrase.length && phrase[k] !== " ") 
        k++;
      

      /* Extract the actual anchor substring from start and end indicies */
      const anchor = phrase.substring(j, k)
      parts.push(<a href=`https://instagram.com/$anchor`>anchor</a>);

      /* Update indicies to end of extracted anchor */
      j = k;
      i = k;

     else if (j === phrase.length - 1) 
      if (i !== j) 
        /* Edge case to ensure whole string is collected if no anchor
        or chracters exist after an anchor */
        parts.push(phrase.substring(i, j + 1));
      
    
  

  return parts;

这可以通过以下方式使用,其中所有情况都按预期工作:

<div>
  <p>Plain string:</p>
  ExtractAnchors("Follow us")

  <p>String with whitespaces and single anchor:</p>
  ExtractAnchors("Follow us at @foo now")

  <p>String with whitespaces, multiple anchors, one at end of phrase:</p>
  ExtractAnchors("Follow us at @foo now or @bar")

  <p>String with whitespaces, multiple anchors, one at start of phrase:</p>
  ExtractAnchors("@foo or @bar are good to follow")

  <p>Empty string:</p>
  ExtractAnchors("")
</div>

这是working example - 希望对您有所帮助!

【讨论】:

我本来打算建议一种字符串构建方法,但是工作量很大:D 很高兴你发布了这个。

以上是关于显示带有空格和 JSX 的数组的主要内容,如果未能解决你的问题,请参考以下文章

我的数组包含一个空格 [" "]。当我 .join 带有下划线的空格时,结果字符串中的空格元素在 html 中不可见

代码格式:在 JSX 代码中的二元运算符周围添加空格

显示带有不间断空格和多行的 NSAttributedString 的 Swift 错误

如何将文本文件存储到带有空格的字符数组中?

如何在 React JSX 中添加空格

将带有空格分隔符的字符串转换为数组。并输出这个数组,就像一个字符串