将String转换为Array更新值并使用javascript返回一个字符串

时间:2015-03-26 02:14:24

标签: javascript

我有一个用('\ n')

分隔的字符串
    car_make:Honda
    car_model:Accord

我正在尝试构建一个更新给定值的javascript函数,并返回更新后的字符串。

  function updateCar(car_str, new_car_make, new_car_model){
    var car_array = car_str.split('\n');
    var new_car_array = new Array(); 
    if(new_car_make){
        //update new_car_array i.e new_car_array 
       }

     if(new_car_model){
          //update new_car_array i.e new_car_array 
       }

      return new_car_array.toString();
 };

所以有人使用这个功能

   updateCar(car_str, 'Acura', 'Integra');

新输出看起来像这样

    car_make:Acura
    car_model:Integra

或者如果他们使用它们:

    updateCar(car_str, 'Acura', '');

输出看起来像这样

    car_make:Acura
    car_model:Accord

我不知道为什么我看不出这么简单。我已经完成了搜索,但也许我没有找到合适的条款。

4 个答案:

答案 0 :(得分:0)

不确定这是否有用,但似乎您最好只在每行的末尾添加逗号并转换为/从JSON转换

编辑:您还必须将值(可能是键)包装在引号

答案 1 :(得分:0)



var car_str = "car_make:Honda\ncar_model:Accord";

function updateCar(car_str, new_car_make, new_car_model) {
  var lines = car_str.split('\n');
  var car = {};
  lines.forEach(function(line) {
    var parts = line.split(':');
    car[parts[0]] = parts[1];
  });

  if (new_car_make) {
    car.car_make = new_car_make;
  }

  if (new_car_model) {
    car.car_model = new_car_model;
  }

  return 'car_make:' + car.car_make + '\ncar_model:' + car.car_model;
};

updateCar(car_str, 'Acura', 'Integra'); // => car_make:Acura\ncar_model:Integra




答案 2 :(得分:0)

没有必要创建一个新数组来存储处理结果。您可以使用通过调用split

创建的数组
  function updateCar(car_str, new_car_make, new_car_model){
    var car_array = car_str.split('\n'); 
    if(new_car_make){
       }

     if(new_car_model){
       }

      return car_array.toString();
 };

由于您传递了一致的字符串,我们知道car_array的内容是什么。例如,如果你传入

car_make:Honda
car_model:Accord

您的数组将如下所示

["car_make:Honda","car_model:Accord"]

当我们成功输入其中一个if语句时,我们知道我们在数组中设置了一个新值。由于我们知道数组的结构和内容,因此我们可以通过索引设置新值。

  function updateCar(car_str, new_car_make, new_car_model){
    var car_array = car_str.split('\n'); 
    if(new_car_make){
        car_array[0] = "car_make:" + new_car_make; 
       }

     if(new_car_model){
          car_array[1] = "car_model:" + new_car_model; 
       }

      return car_array.toString();
 };

因此,如果我们在执行期间调用updateCar('car_make:Honda\ncar_model:Accord', 'Acura', 'Integra');,我们的函数将如下所示:

  function updateCar('car_make:Honda\ncar_model:Accord', 'Acura', 'Integra'){
    var car_array = 'car_make:Honda\ncar_model:Accord'.split('\n'); 
    if('Acura'){
        ["car_make:Honda","car_model:Accord"][0] = "car_make:" + 'Acura'; 
       }

     if('Integra'){
          ["car_make:Acura","car_model:Accord"][1] = "car_model:" + 'Integra'; 
       }

      return ["car_make:Acura","car_model:Integra"].toString();

将返回"car_make:Acura,car_model:Integra"。我们可以使用Array.join(separator)来更改我们加入数组中元素的方式。由于我们传入了一个\n分隔的字符串,我们可以使用\n来加入字符串,以获得看起来像我们所放入的内容。

 function updateCar(car_str, new_car_make, new_car_model){
    var car_array = car_str.split('\n'); 
    if(new_car_make){
        car_array[0] = "car_make:" + new_car_make; 
       }

     if(new_car_model){
          car_array[1] = "car_model:" + new_car_model; 
       }

      return car_array.join("\n");
 };

现在,如果我们致电updateCar('car_make:Honda\ncar_model:Accord', 'Acura', 'Integra');,我们将获得

car_make:Acura
car_model:Integra

如果我们为任一参数传入一个空字符串,我们将不会输入该特定的if语句,因此该值将保持不变。

答案 3 :(得分:0)

这是一个解决方案,但是,你确定行分隔符真的是" \ n"而不是CR或LF? String.fromCharCode(13)或String.fromCharCode(10)

var str="car_make:Honda\ncar_model:Accord";
var delim1 = "\n"; 
var delim2 = ":";
var formatAttrs= function (attrs) {
    return "car_make"+delim2+attrs.car_make+
        delim1+"car_model"+delim2+attrs.car_model;
};
var parseStr = function (car_str){
    var attrs= {};
    car_str.split(delim1).forEach(function(row){
        var segments = row.split(delim2);
        attrs[segments[0]]=segments[1];
    });
    return attrs;
};
var updateCar = function (car_str, new_car_make, new_car_model){
    var attrs = parseStr(car_str);
    attrs.car_make = new_car_make || attrs.car_make;
    attrs.car_model= new_car_model|| attrs.car_model;
    return formatAttrs(attrs);
};

console.log(updateCar(str, 'Buick', 'Regal'));
console.log(updateCar(str, '', 'Regal'));
console.log(updateCar(str, 'Buick', null));

返回:

car_make:Buick
car_model:Regal

car_make:Honda
car_model:Regal

car_make:Buick
car_model:Accord