我有一个用('\ 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
我不知道为什么我看不出这么简单。我已经完成了搜索,但也许我没有找到合适的条款。
答案 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