javascript使用reduce功能

时间:2017-07-26 08:09:09

标签: javascript ecma

我有以下数组

sudo apt-get install libOpenNI-dev

我希望输出为 ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2" ] ,因此p1..3是视频文件,支持开始和结束时间。 0,5意味着p1轮廓播放5秒,依此类推。 我想知道使用ECMA脚本映射总共需要什么时间的配置文件,减少功能。这是我尝试但它不起作用:

["5,p1","10,p2","5,p3"]

4 个答案:

答案 0 :(得分:6)

我不认为它可以一次完成,但我可能是错的。我要走两步......

  1. 缩小数组以获得pX值的唯一映射
  2. 将结果映射回所需格式的数组
  3. 
    
    var input = ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2" ] 
    
    var step1 = input.reduce(function(p,c){
        var parts = c.split(",");
        if(!p[parts[2]])
           p[parts[2]] = 0;
        p[parts[2]] += parseInt(parts[1],10) - parseInt(parts[0],10);
        return p;
    },{});
    
    var result = Object.keys(step1).map(function(e){
        return step1[e] + "," + e;
    });
    
    console.log(result);
    
    
    

答案 1 :(得分:1)

你可以使用es6 map:

arrayWithNumbers.map(a => {var spl = a.split(','); return (spl[1] - spl[0]) + "," + spl[2]})

答案 2 :(得分:1)

对于单循环方法,您可以对相同的第三部分使用哈希表,例如'p1'。如果给出了散列,则使用实际的delta更新该值。



var array = ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2"],
    hash = Object.create(null),
    result = array.reduce(function(r, a) {
        var parts = a.split(','),
            delta = parts[1] - parts[0],
            key = parts[2];

        if (!(key in hash)) {
            hash[key] = r.push([delta, key].join()) - 1;
            return r;
        }
        r[hash[key]] = [+r[hash[key]].split(',')[0] + delta, key].join();
        return r;
    }, []);

console.log(result);




答案 3 :(得分:0)

我已经更新了代码。请立即检查。

    var ca =   ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2" ] .reduce(function(result, elem) {
        var spl = elem.split(',');
        var difference = Math.round(spl[1] - spl[0]);
        var found = false 
        for (var i = 0 ; i < result.length; i++) {
          if (result[i].split(',')[1] == spl[2]) {
            result[i] = parseInt(result[i].split(',')[0]) + difference+","+spl[2]; 
            found = true;
          }
        }
        if (!found) result.push(difference+","+spl[2]);       
        return result;
        },[]);
        
     console.log("modified array",ca);