【问题标题】:Add modifiers to duplicate elements in Lodash.js?为 Lodash.js 中的重复元素添加修饰符?
【发布时间】:2015-05-25 05:05:51
【问题描述】:

输入将是一个包含重复元素的列表,如下所示:

['30','10','10','20','20','30']

输出将是一个包含如下修改元素的列表:

['30#1', '10#1', '10#2', '20#1', '20#2', '30#2']

# 修饰符表示该元素出现在列表中的时间。

有人对此有想法吗?

【问题讨论】:

    标签: javascript jquery underscore.js lodash


    【解决方案1】:

    因此,您希望结果是一个数组,其中一个项目对应于原始数组中的每个项目。这是Array.prototype.map 的工作。您想保持对每个项目出现的次数的运行计数,您可以使用一个简单的对象来做到这一点。在每次迭代中,您都会查找项目出现的次数并添加一个。将该数字存储为新计数并使用它来构建您的返回值。或多或少是这样的:

    var arr = ['30', '10', '10', '20', '20', '30'];
    var counts = {};
    
    var arr2 = arr.map(function(item) {
      counts[item] = (counts[item] || 0) + 1;
      return item + "#" + counts[item];
    });
    

    你根本不需要 Lodash。

    【讨论】:

      【解决方案2】:

      这是一个使用 lodash 的示例。

      _.map(coll, function(item) {
          return item + '#' +
              _.set(this, item, _.get(this, item, 0) + 1)[item];
      }, {});
      

      很好的是,您无需在此处设置临时变量来计算结果。想法是将它们存储在this - 传递给map() 的空对象。

      如果属性不存在,get() 函数会为您提供默认值 0。所以这可以直接和set()一起使用,设置属性值,返回对象。

      【讨论】:

        【解决方案3】:

        例子:

        var count = {};
        ['30','10','10','20','20','30'].map(function(current) {
            count[current] ? count[current] +=1 : count[current] = 1;
            return current + '#' + count[current];
        })
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-10
          • 1970-01-01
          • 2018-04-06
          • 2019-07-11
          • 2016-08-02
          • 1970-01-01
          • 2018-02-06
          • 1970-01-01
          相关资源
          最近更新 更多