如何在一行中用条件运算符编写多个赋值?
How to write multiple assignments with conditional operator in one line?
我想知道如何将这些条件赋值写在一行中。
我的 React 项目中的代码:
const activeBox = calendarTab ? 'schedule-box active-box' : 'schedule-box';
const engagementBox = engagement ? 'schedule-box active-box' : 'schedule-box';
const scheduleBox = weekSchedule ? 'schedule-box active-box' : 'schedule-box';
在线解决
使用对象Destructuring assignment and Object.fromEntries()
const calendarTab = true;
const engagement = false;
const weekSchedule = false;
const { activeBox, engagementBox, scheduleBox } = Object.fromEntries(
[calendarTab, engagement, weekSchedule].map((item, idx) => [
[`activeBox`, `engagementBox`, `scheduleBox`][idx],
item ? "schedule-box active-box" : "schedule-box"
])
);
console.log(activeBox);
console.log(engagementBox);
console.log(scheduleBox);
您可以定义一个关系列表以使其更简单
const data = [
{ id: "calendarTab", value: true, attr: "activeBox" },
{ id: "engagement", value: false, attr: "engagementBox" },
{ id: "weekSchedule", value: false, attr: "scheduleBox" }
];
const result = Object.fromEntries(
data.map(x => [
x.attr,
x.value ? "schedule-box active-box" : "schedule-box"
])
);
console.log(result.activeBox);
console.log(result.engagementBox);
console.log(result.scheduleBox);
正常执行不在一行中:
const calendarTab = true;
const engagement = false;
const weekSchedule = false;
const aqClass = value => {
return value ? "schedule-box active-box" : "schedule-box"
}
const activeBox = aqClass(calendarTab);
const engagementBox = aqClass(engagement);
const scheduleBox = aqClass(weekSchedule)
console.log(activeBox);
console.log(engagementBox);
console.log(scheduleBox);
我用过Array#destructuring with Backtick。如果条件为真,则添加 "active-box"
。
const isActive = (condition) => condition ? "active-box" : "";
const [activeBox, engagementBox, scheduleBox] = [
`schedule-box ${isActive(calendarTab)}`, // This value goes to activeBox variable
`schedule-box ${isActive(engagement)}`, // This value goes to engagementBox variable
`schedule-box ${isActive(weekSchedule)}` // This value goes to scheduleBox variable
]
希望这对您有所帮助。
我想知道如何将这些条件赋值写在一行中。
我的 React 项目中的代码:
const activeBox = calendarTab ? 'schedule-box active-box' : 'schedule-box';
const engagementBox = engagement ? 'schedule-box active-box' : 'schedule-box';
const scheduleBox = weekSchedule ? 'schedule-box active-box' : 'schedule-box';
在线解决
使用对象Destructuring assignment and Object.fromEntries()
const calendarTab = true;
const engagement = false;
const weekSchedule = false;
const { activeBox, engagementBox, scheduleBox } = Object.fromEntries(
[calendarTab, engagement, weekSchedule].map((item, idx) => [
[`activeBox`, `engagementBox`, `scheduleBox`][idx],
item ? "schedule-box active-box" : "schedule-box"
])
);
console.log(activeBox);
console.log(engagementBox);
console.log(scheduleBox);
您可以定义一个关系列表以使其更简单
const data = [
{ id: "calendarTab", value: true, attr: "activeBox" },
{ id: "engagement", value: false, attr: "engagementBox" },
{ id: "weekSchedule", value: false, attr: "scheduleBox" }
];
const result = Object.fromEntries(
data.map(x => [
x.attr,
x.value ? "schedule-box active-box" : "schedule-box"
])
);
console.log(result.activeBox);
console.log(result.engagementBox);
console.log(result.scheduleBox);
正常执行不在一行中:
const calendarTab = true;
const engagement = false;
const weekSchedule = false;
const aqClass = value => {
return value ? "schedule-box active-box" : "schedule-box"
}
const activeBox = aqClass(calendarTab);
const engagementBox = aqClass(engagement);
const scheduleBox = aqClass(weekSchedule)
console.log(activeBox);
console.log(engagementBox);
console.log(scheduleBox);
我用过Array#destructuring with Backtick。如果条件为真,则添加 "active-box"
。
const isActive = (condition) => condition ? "active-box" : "";
const [activeBox, engagementBox, scheduleBox] = [
`schedule-box ${isActive(calendarTab)}`, // This value goes to activeBox variable
`schedule-box ${isActive(engagement)}`, // This value goes to engagementBox variable
`schedule-box ${isActive(weekSchedule)}` // This value goes to scheduleBox variable
]
希望这对您有所帮助。