【问题标题】:Join array without removing whitespace加入数组而不删除空格
【发布时间】:2018-04-12 09:22:04
【问题描述】:

我有一个关于加入数组的小问题。我有一个字母数组,类似这样的:

let array = ['a','b','','c']

我不想加入数组中的元素以获得这样的输出:

let array = ['ab','c']

你能帮帮我吗?我正在搜索,但我发现的所有内容都是关于从数组或字符串中删除空格:(

【问题讨论】:

  • 这种情况会发生什么['a','b','','c','d']
  • 那么,你想要连接相邻的元素,除非那个元素是一个空字符串,这意味着元素之间的中断?
  • 你的问题太模糊了。您究竟想要哪种模式?上面提到的情况会发生什么。
  • 如果数组是 ['a','b',' ','c','d',' ','e','f'] 我不想得到 [' ab','cd','ef']
  • 无论如何,伙计们,我真的给了你我想要的例子,但你给了我 -4 的声誉......你的行为无话可说。

标签: javascript ecmascript-6


【解决方案1】:

类似的东西:

let array = ['a', 'b', '', 'c'];

let res = array.reduce((res, s) => {
    if (s.length) {
        res[res.length - 1] += s;
    } else {
        res.push('');
    }
    return res;
}, ['']);

console.log(res);

它确实假设数组中至少有一个字符串,最后一个元素不会是空字符串,并且不会有两个相邻的空字符串。如果有这些问题,请根据需要进行调整。

【讨论】:

    【解决方案2】:

    您可以使用Array#mapArray#joinString#Split 的组合来实现您想要的。

    在这里,我使用space 作为分隔符,但您可以使用数组中不使用的任何内容。

    let array = ['a','b','','c'];
    
    let result = array.map(e => e.length ? e : ' ').join('').split(' ');
    console.log(result);

    【讨论】:

    • 如果原始数组有一个空格作为元素之一怎么办? OP 没有提供足够的细节。
    • 但是对于像['a','b','','c', 'd', 'e'];这样的数组来说,这并不像预期的那样工作
    • @CristianS。是的。
    • @Zenoo 它返回 ["ab", "cde"] ,我假设他只尝试加入 2 个元素。好吧,TBH OP 不够清楚。 (不是我的反对票!)
    • @CristianS。对我来说,据我了解,OP 有一个字符数组,他想将其转换为一个单词数组。我可能是错的,我会在这里留下我的答案,以防我是对的。
    【解决方案3】:

    您可以使用reduce() 方法创建新数组和一个变量以在空字符串上递增。

    let array = ['a', 'b', '', 'c', 'd', 'e', '', '', '', 'f', '', 'g'];
    
    let i = 0;
    let result = array.reduce((r, e, j, arr) => {
      r[i] = (r[i] || '') + e;
      if (!e && arr[j - 1]) i++
      return r;
    }, [])
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 2021-06-15
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多