Javascript:将字符串转换为对象数组?

时间:2018-04-16 07:55:14

标签: javascript arrays string type-conversion

告诉我,如何以最佳方式转换字符串,如

const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407";

到像

这样的数组
const range = [
    {
        min: 1350,
        max: 1350,
    },
    {
        min: 1351,
        max: 1351,
    },
    {
        min: 1390,
        max: 1391,
    },
    {
        min: 1401,
        max: 1401,
    },
    {
        min: 1402,
        max: 1407,
    },
];

换句话说,您需要使用一个字符串创建一个数字范围数组,其中明确指定了这些数字范围。

最明显的可能算法是:

1)使用分隔符,

分割字符串

2)使用命令trim

清除生成的部分空格

3)检查部件是否为数字

4)如果没有,则使用分隔符-

拆分零件

5)使用命令trim

清除所获得的部件空间

6)检查组件eq 2的数量,并且它是一个数字

但它是否有可能使其更优化,更美观,更有效?

5 个答案:

答案 0 :(得分:5)

您可以使用.split().map()



const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407";

const range = data.split(",").map(s => {
  let [min, max = min] = s.split("-");

  return {min: Number(min), max: Number(max)}
});

console.log(range);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:2)

尝试这样的事情:



const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407"

const result = data
  .split(/\s*,\s*/)
  .map(pair => {
    const [min, max = min] = pair
      .split(/\s*-\s*/)
      .map(Number)

    return {
      min,
      max
    }
  })

console.log(result)




答案 2 :(得分:1)

您可以将split方法与reduce方法结合使用。

  

reduce()方法对累加器和每个都应用一个函数   数组中的元素(从左到右)将其缩小为单个元素   值。

另外,使用+运算符以强制结果Number



const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407";
const array = data.split(', ').reduce(function(arr, elem){
   var [min, max] = elem.split('-');
   arr.push({
      min : + min,
      max: + (max || min)
   });
   return arr;
},[]);
console.log(array);




答案 3 :(得分:0)

我认为简单且易于理解的方法是遍历值并检查它们是否具有范围值(带连字符)并相应地为range数组创建对象。

const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407";
var range = [];
data.split(',').forEach((val)=>{
  var obj = {};
  if(val.indexOf('-') === -1 ){
    obj.min = val;
    obj.max = val;
  } else {
    obj.min = val.split('-')[0].trim();
    obj.max = val.split('-')[1].trim();
  }
  range.push(obj);
});

console.log(range);

答案 4 :(得分:0)

此代码可以帮助您。

const data = "1350, 1351, 1390-1391, 1401, 1402 - 1407";
var arr = data.split(',');
const range = [];
for(var i=0; i< arr.length; i++){
var b = arr[i].split('-');
if(!b[1])b[1]=b[0];
var obj = new Object();
obj.min = parseInt(b[0]);
obj.max = parseInt(b[1]);
range.push(obj);
}
console.log(range);