javascript更改字符串的输出格式

时间:2018-12-09 13:27:15

标签: javascript arrays

我想从这样的字符串产生输出:

str = "1.000;74.85;10.000;62.13;9999;74.85;15000";

收件人:

1-10 : 74.85
10-9999 : 62.13
9999-15000 : 74.85

这样索引就可以像这样结束:     1-3:2     3-5:4     5-7:6

然后将奇数索引转换为整数

我写了一些脚本,但是预期结果并不理想,我认为这是太多的代码。可能还有其他更短的方法。

我的代码:

    var str = "1.000;74.85;10.000;62.13;9999;74.85;15000";
    var delimiter = ';';

    function splitString(stringToSplit, separator) {
        return stringToSplit.split(separator);
    }

    var arr = splitString(str, delimiter);
    var oddElement = [];
    var evenElement = [];
    for (var i = 0; i < arr.length; i++) {
        if ((i % 2) === 0) {
            oddElement.push(parseInt(arr[i]))
        } else if ((i % 2) != 0) {
            evenElement.push(arr[i]);
        }

    }

    function duplicateElements(array, times) { 
        return array.slice(1,-1).reduce((res, current) => {
            return res.concat(Array(times).fill(current));
        }, []);

    }

    oddElement = duplicateElements(oddElement, 2);
    oddElement.unshift(parseInt(arr[0]));
    oddElement.push(parseInt(arr[arr.length - 1]));
    temp = [];
    for (var i = 0; i < oddElement.length; i ++) {
        temp.push(oddElement[i] + '-' + oddElement[++i]);
    }


   evenElement.forEach(function(el) {
        for (var i = 0; i < temp.length; i++) {
            console.log(temp[i] + ":" + el);
        }       
    })

   console.log(temp);
   console.log(evenElement);

3 个答案:

答案 0 :(得分:0)

var str = "1.000;74.85;10.000;62.13;9999;74.85;15000";
var arr = str.split(';');
var len = arr.length;
var data = [];
for (i = 1; i < arr.length - 1; i+=2) {
  data.push(arr[i - 1] + '-' + arr[i + 1] + ' : ' + arr[i]);
}

答案 1 :(得分:0)

您可以只使用一个循环并将您的答案一次附加到一个字符串后面。设计这种逻辑的一种简单方法是通过拆分数组中的索引查看所需的结果:

parseInt(splitStr[1]) + "-" + parseInt(splitStr[3]) + " : " + splitStr[2]

然后只需弄清楚如何在每次循环迭代中获得相同的结果:

str = "1.000;74.85;10.000;62.13;9999;74.85;15000"; 

splitStr = str.split(";");

outputStr = "";

for (let i = 0 ;  i < splitStr.length - 2 ; i += 2) {
    outputStr += parseInt(splitStr[i]) + "-" + parseInt(splitStr[i + 2]) + " : " + splitStr[i + 1] + "\n";
}

console.log(outputStr);

答案 2 :(得分:0)

这将是一种实用的方法:

  1. 拆分
  2. 解析每个值
  3. 为每个范围创建包含开始,结束和值(v)的对象
  4. (可选)映射到对象以创建字符串

const str = "1.000;74.85;10.000;62.13;9999;74.85;15000";

function format1(s, d = ';') {
  return s
    .split(d)
    .map(n => parseFloat(n))
    .reduce((r, n, i, a) => {
      if (i > 1 && i % 2 === 0)
        r.push({
          s: a[i - 2],
          v: a[i - 1],
          e: n
        });
      return r;
    }, []);
}

const formatted1 = format1(str);
const formatted2 = formatted1.map(({
  s,
  v,
  e
}) => `${s}-${e} : ${v}`);
console.log(formatted1);
console.log(formatted2);