我的目标是在days
数组中添加新对象,但它会继续替换数组中的现有对象。我不知道问题所在。
当前结果:
[{"name":"Tuesday","value":"Tues"},{"name":"Tuesday","value":"Tues"},{"name":"Tuesday","value":"Tues"}]
这是代码:
var query = "Sunday,Monday,Tuesday";
var day = {day: "", value: ""}
var days = [];
query.split(",").map(p => {
switch (p) {
case "Sunday":
day ["day "] = "Sunday";
day ["value"] = "Sun";
break;
case "Monday":
day ["day "] = "Monday";
day ["value"] = "Mon";
break;
case "Tuesday":
day ["day "] = "Tuesday";
day ["value"] = "Tues";
break;
}
days.push(day);
});
document.getElementById("demo").innerHTML = JSON.stringify(days);
答案 0 :(得分:0)
您可以在switch
语句中将对象作为返回值。如果找不到字符串,则返回一个带有空字符串的对象。
此方法使用从Array#map
返回的数组。
var query = "Sunday,Monday,Tuesday",
days = query.split(",").map(p => {
var day = { day: "", value: "" };
switch (p) {
case "Sunday": return { day: "Sunday", value: "Sun" };
case "Monday": return { day: "Monday", value: "Mon" };
case "Tuesday": return { day: "Tuesday", value: "Tues" };
}
return { day: "", value: "" };
});
console.log(days);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
当前代码不断将一个对象引用推入结果数组;在day
回调中定义map
可以解决此问题,但是引起side effects并不是map
的意图。
Array#map
接受一个回调参数,该参数应为每个元素返回转换后的值。 map
本身的返回值是新的变异结果数组。回调不应推送到外部数组。
使用switch
语句冗长且难以维护,从而导致大量重复代码。
const query = "Sunday,Monday,Tuesday";
const days = query.split(",").map(e => {
return {day: e, value: e.substr(0, 3)};
});
console.log(days);
我注意到您希望"Tues"
为4个字符的缩写,而"Sun"
和"Mon"
为3。如果确实是期望的结果,我建议使用一个单独的对象来存储这些转换:
const query = "Sunday,Monday,Tuesday";
const abbreviations = {Tuesday: "Tues"};
const days = query.split(",").map(e => {
return {day: e, value: abbreviations[e] || e.substring(0, 3)};
});
console.log(days);
基本上,这将检查是否指定了特殊的缩写,否则仅返回前三个字符。