【问题标题】:jQuery create new Array with doubling old onejQuery创建新的数组,将旧数组加倍
【发布时间】:2017-06-05 18:56:13
【问题描述】:

我有一个问题,我需要从输入中创建数组,但每个输入字符都需要在数组中加倍。例如,如果输入是 ABC 数组,则需要导致 AABBCC。 所以我最终得到了这段代码

if (hex.length < 6) {
    hex.splice(hex.indexOf(hex[i]) + 1, 0, hex[i]);
}

如果输入是 ABC,它将输出 AABBCC
如果输入是 AAB,它将输出 AAAABB

但如果第一个和最后一个字符与 ABA 相同,则最终将是 AAABBA。这是为什么呢?

【问题讨论】:

  • String.indexOf 仅返回 first occurrence of the specified value
  • 也许:var result = string.replace(/./g, '$&amp;$&amp;');

标签: javascript jquery arrays sorting


【解决方案1】:

这是因为indexOf() 返回指定值的第一次出现。您可以改用reduce() 方法:

const double = arr => arr.reduce((acc, next) => [...acc, next, next], []);
console.log(double(Array.from('ABA')).join(''));

【讨论】:

    【解决方案2】:

    您可能想尝试array.Map,而不是使用仅返回第一个索引的indexOf 显式迭代。

    var a = "abc";
    var b = "aba";
    var c = "foo ? bar mañana mañana"
    
    function duplicate(phrase) {
      return Array.from(phrase).map(function(elem) {
        return elem + elem;
      }).join("");
    }
    
    var aAns = duplicate(a);
    var bAns = duplicate(b);
    var cAns = duplicate(c);
    
    console.log(aAns);
    console.log(bAns);
    console.log(cAns);

    编辑

    感谢 Michał Perłakowski 提供 Unicode 标注!

    【讨论】:

      【解决方案3】:

      这是使用.map()的绝佳机会:

      var hex = 'ABC';
      
      var doubledHex = Array.from(hex).map(function(i) {
        return i + i;
      }).join('');
      
      console.log(hex);
      console.log(doubledHex);

      【讨论】:

      • @MichałPerłakowski 在不支持Array.from() 的非现代浏览器上你能做什么?
      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2019-05-31
      • 2015-10-17
      • 2021-08-12
      相关资源
      最近更新 更多