nunnly / everycode

Javascript 每日一练
116 stars 26 forks source link

2014年12月24日 D5 #32

Open nunnly opened 9 years ago

nunnly commented 9 years ago

写一个csvColumns函数,传入一个类似CSV(如下所示格式)的数组,和索引,数组代表该CSV的列和行,并返回该索引所对应数组中指定的列。

//在CSV格式示例如下:“1,2,3\ n4,5,6\ n7,8,9\ n10,11,12”
//应该被被转换成:
[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
//返回对应下标的所有数字
csvColumns( "1,2,3\n4,5,6" , [0, 1] ) => returns "1,2\n4,5" 
csvColumns( "1,2\n3,4\n5,6" , [5, 6, 7] ) => returns "" 
csvColumns( "a,b,c,d,e\n1,2,3,4,5\nf,g,h,i,j" , [1, 3, 5, 7] ) => returns "b,d\n2,4\ng,i"

// param1 String
// param2 Array
// return String
function csvColumns(csv, indices){
  //TODO 
}
think2011 commented 9 years ago
function csvColumns(csv, indices){
    var results = [];

    // 得到csv转换的数组
    var csvArr = csv.split('\n').map(function (v,k) {return v.split(',') });

    // 循环push每个 符合indices索引 的值到results
    csvArr.forEach(function (v, k) {
        var _temp = [];
        indices.forEach(function (v1) {
            v[v1] && _temp.push(v[v1]);
        });

        _temp.length && results.push(_temp);
    });

    return results.join('\\n');
}

// 测试用例
console.log(csvColumns( "1,2,3\n4,5,6" , [0, 1] )) // returns "1,2\n4,5" 
console.log(csvColumns( "1,2\n3,4\n5,6" , [5, 6, 7] )) // returns "" 
console.log(csvColumns( "a,b,c,d,e\n1,2,3,4,5\nf,g,h,i,j" , [1, 3, 5, 7] )) // returns "b,d\n2,4\ng,i"

有没有更好的方式呢?

VaJoy commented 9 years ago
function csvColumns(csv, indices){
  var result = "",
      rawArr = csv.split("\n"),
      l = rawArr.length-1;
  rawArr.forEach(function(item,index){
      var temp, s="";
      indices.forEach(function(i){ 
          temp = item.substr(2*i,1);
          if(temp){ result+= s+temp;s=","}
      })
      result+= (index==l?"":"\\n");
  })
  return result==="\\n\\n"?"":result;
}