【问题标题】:how to map an array with uppercase function in javascript?如何在javascript中使用大写函数映射数组?
【发布时间】:2012-04-13 22:50:03
【问题描述】:

我很感兴趣是否有任何函数,如 php 中的 array_map 或 array_walk。

不需要遍历所有数组的 for。我可以自己做。

var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
// i would like something like this if exists - function(array, 'upperCase');

【问题讨论】:

    标签: javascript jquery arrays uppercase


    【解决方案1】:

    您可以考虑使用提供标准功能操作的Underscore.js 库。

    那么代码就这么简单:

    _.map(array, function (x) { return x.toUpperCase(); });
    

    【讨论】:

    • 还有:_.map(array, _.upperCase)
    【解决方案2】:

    Javascript 有一个 map() 方法。一个很好的参考是http://www.tutorialspoint.com/javascript/array_map.htm

    【讨论】:

      【解决方案3】:

      您可以使用$.map()String.toUpperCase()(或String.toLocaleUpperCase(),如果适用)应用于您的数组项:

      var upperCasedArray = $.map(array, String.toUpperCase);
      

      请注意,$.map() 构建了一个新数组。如果您想就地修改现有数组,可以将$.each() 与匿名函数一起使用:

      $.each(array, function(index, item) {
          array[index] = item.toUpperCase();
      });
      

      更新:正如 afanasy 在下面的 cmets 中正确指出的那样,直接映射 String.toUpperCase 仅适用于基于 Gecko 的浏览器。

      为了支持其他浏览器,您可以提供自己的功能:

      var upperCasedArray = $.map(array, function(item, index) {
          return item.toUpperCase();
      });
      

      【讨论】:

      • @afanasy,真的,我可能使用 Firefox 太多了。我用便携式地图解决方案更新了我的答案。
      【解决方案4】:

      你可以为它实现一个函数:

      Array.prototype.myUcase=function()
      {
        for (i=0;i<this.length;i++)
          {
          this[i]=this[i].toUpperCase();
          }
      }
      

      用法

      var fruits=["Banana","Orange","Apple","Mango"];
      fruits.myUcase();
      

      结果

      BANANA,ORANGE,APPLE,MANGO 
      

      参考LINK

      【讨论】:

        【解决方案5】:

        map() 在某种程度上类似于 array_walk

        http://jqapi.com/#p=map

        【讨论】:

          【解决方案6】:

          查看JavaScript Array.map 了解官方信息 JavaScript 地图功能。你可以在那里玩样品 看看函数是如何工作的。尝试将其复制到示例框中:

          var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
          var uppers = array.map(function(x) { return x.toUpperCase(); });
          console.log(uppers);
          

          它会打印出来:

          DOM,LUN,MAR,MER,GIO,VEN,SAB
          

          【讨论】:

            【解决方案7】:

            这是一个没有创建循环或与 ES3 兼容的函数的单行代码 因为你只调用一次 toUpperCase,所以速度更快

            // watch out for strings with comma (eg: ["hi, max"]) then use custom join/split()
            // or just use something safer such as Array.map()
            var uppercaseArray = array.toString().toUpperCase().split(",");
            var uppercaseArray = array.join(0).toUpperCase().split(0);
            var uppercaseArray = (array+"").toUpperCase().split(",");
            

            【讨论】:

              【解决方案8】:

              这可能有点矫枉过正,但你也可以这样做

              var upperCaseArray = array.map(String.prototype.toUpperCase.call.bind(String.prototype.toUpperCase));
              

              【讨论】:

              • @nkron 的回答与此类似,但不那么冗长。
              • 该代码有点混乱,因为代码的String.prototype.toUpperCase.call 部分只是访问Function's call 方法。该方法对于所有函数都是相同的,因此您可以将任何函数粘贴到 .call 的左侧而不改变行为。我建议将其更改为 Function.prototype.call... 以明确表明您正在使用 Function 的调用,而不是 toUpperCase 函数的特殊功能。
              • 更清楚的例子是:['a','b','c'].map(Function.prototype.call.bind(String.prototype.toUpperCase))
              【解决方案9】:

              我知道聚会有点晚了,但我想在这里添加它作为另一种代表团的做法。

              var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
              
              "".toUpperCase.apply(array).split(',')
              

              【讨论】:

              • 哇.... 解释一下它是如何工作的。如何/为什么将数组转换为字符串
              • 当然。因为我想'toUpperCase',我需要能够委托给它,或者借用那个功能。因为,我需要一个数组来做到这一点,我不得不以某种方式将“上下文”输入传递给“toUpperCase”。 apply (因为我们使用的是数组),允许这样做。因为我没有传递第二个参数,第一个参数“数组”是上下文。所以基本上,它为我展开了......然后我将它拆分为一个数组。
              【解决方案10】:

              与之前的 for 循环答案类似,这个答案使用了 javascript 的一些更基本的功能:

              function looptoUpper(arr){
                  var newArr = [];
                  for (var i = 0; i < arr.length; i++){
                      newArr.push(arr[i].toUpperCase());
                  }
                  return newArr;
              }
              looptoUpper(['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab']);
              

              【讨论】:

                猜你喜欢
                • 2017-01-19
                • 1970-01-01
                • 2022-01-02
                • 2018-02-12
                • 1970-01-01
                • 2011-08-04
                • 1970-01-01
                • 1970-01-01
                • 2022-01-02
                相关资源
                最近更新 更多