【问题标题】:join array elements with specified element to be placed at the end将数组元素与要放置在末尾的指定元素连接起来
【发布时间】:2021-09-04 08:38:30
【问题描述】:

我有一个数组

input = ["Hi","Bye","Hello","Jose","Juan",null,"How","","Disco"]

我希望始终将单词“Bye”放在连接字符串的末尾

我试过了

input.filter(Boolean).join("@"))

预期输出

"Hi@Hello@Jose@Juan@How@Disco@Bye"

我正在寻找最有效的方法,或者是否有一种方法可以将过滤器功能与布尔过滤器一起添加

【问题讨论】:

  • 为什么不先把Bye移到数组的末尾呢?

标签: javascript arrays string


【解决方案1】:

在执行布尔测试后使用与Bye 进行比较的过滤函数。

然后将@Bye 附加到结果的末尾。

input = ["Hi", "Bye", "Hello", "Jose", "Juan", null, "How", "", "Disco"];
console.log(input.filter(s => s && s != 'Bye').join("@") + '@Bye');

【讨论】:

  • 如果输入数组中有多个Bye怎么办?
  • 这可能不起作用,因为“Bye”这个词每次都可能出现在列表中,也可能不存在!
【解决方案2】:

1) Filter input 数组不是emptynull 和过滤器一起可以计数Bye(可以有多个Bye

2) 使用Array.from 创建一个仅包含Bye 的新数组,并将其附加到过滤后的数组之后。

3) 然后,你终于可以join数组了。

const input = ["Hi", "Bye", "Hello", "Jose", "Juan", null, "How", "", "Disco"];

let length = 0;

const result = input
  .filter((s) => {
    if (s === "Bye") ++length;
    return s && s !== "Bye";
  })
  .concat(Array.from({ length }, () => "Bye"))
  .join("@");

console.log(result);

【讨论】:

    【解决方案3】:

    Byes 排序到最后?

    const input = ['Hi', 'Bye', 'Hello', 'Jose', 'Juan', null, 'How', '', 'Disco'];
    
    const output = input
      .filter(Boolean)
      .sort((a, b) => (a === 'Bye') - (b === 'Bye'))
      .join('@');
    
    console.log(output);

    【讨论】:

      【解决方案4】:

      如果它是一个字符串,那么获得结果的一种方法是

      const outputString=input.filter(Boolean).join("@"))+"@bye"
      

      【讨论】:

      • 这不会从中间删除Bye
      猜你喜欢
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2012-08-18
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多