Javascript 干字脚本。我如何使用DRY原理来避免这两种吸气剂的重复
我知道下面两个getter是重复的,可以用更好的方式合并和编写。有谁能帮我想出一个方法来巩固这些:- isEqual这里有一个用于比较两个对象的lodash库。 这里的状态是我从中拾取对象的注入状态Javascript 干字脚本。我如何使用DRY原理来避免这两种吸气剂的重复,javascript,typescript,dry,getter,typescript2.0,Javascript,Typescript,Dry,Getter,Typescript2.0,我知道下面两个getter是重复的,可以用更好的方式合并和编写。有谁能帮我想出一个方法来巩固这些:- isEqual这里有一个用于比较两个对象的lodash库。 这里的状态是我从中拾取对象的注入状态 public get isUpperModified(): boolean { if (!this.isUpperAvailable) { return false; } if ( (this.orders
public get isUpperModified(): boolean {
if (!this.isUpperAvailable) {
return false;
}
if (
(this.orders.upperPreference.type === '1' &&
this.state.fetchedData.upperPreference.type === '1') ||
(this.orders.upperPreference.type === 'UPPER' &&
this.state.fetchedData.upperPreference.type === 'UPPER')
) {
return false;
}
if (!isEqual(this.orders.upperPreference, this.state.fetchedData.upperPreference)) {
return true;
}
return false;
}
public get isLowerModified(): boolean {
if (!this.isLowerAvailable) {
return false;
}
if (
(this.orders.lowerPreference.type === '1' &&
this.state.fetchedData.lowerPreference.type === '1') ||
(this.orders.lowerPreference.type === 'LOWER' &&
this.state.fetchedData.lowerPreference.type === 'LOWER')
) {
return false;
}
if (!isEqual(this.orders.lowerPreference, this.state.fetchedData.lowerPreference)) {
return true;
}
return false;
}
实现这一点的方法不止一种 您可以创建一个新函数
isModified(type:string)
,并将upper
或lower
作为参数传递
希望这有帮助
public get isUpperModified(): boolean {
return this.isModified('upper');
}
public get isLowerModified(): boolean {
return this.isModified('lower');
}
private isModified(type: 'lower' | 'upper'): boolean {
const available = type === 'lower' ? this.isLowerAvailable : this.isUpperAvailable;
const order = type === 'lower' ? this.orders.lowerPreference : this.orders.upperPreference;
const state = type === 'lower' ? this.state.fetchedData.lowerPreference : this.state.fetchedData.upperPreference;
if (!available) {
return false;
}
if (
(order.type === '1' &&
state.type === '1') ||
(order.type === type.toUpperCase() &&
state.type === type.toUpperCase())
) {
return false;
}
if (!isEqual(order, state)) {
return true;
}
return false;
}
实现这一点的方法不止一种 您可以创建一个新函数
isModified(type:string)
,并将upper
或lower
作为参数传递
希望这有帮助
public get isUpperModified(): boolean {
return this.isModified('upper');
}
public get isLowerModified(): boolean {
return this.isModified('lower');
}
private isModified(type: 'lower' | 'upper'): boolean {
const available = type === 'lower' ? this.isLowerAvailable : this.isUpperAvailable;
const order = type === 'lower' ? this.orders.lowerPreference : this.orders.upperPreference;
const state = type === 'lower' ? this.state.fetchedData.lowerPreference : this.state.fetchedData.upperPreference;
if (!available) {
return false;
}
if (
(order.type === '1' &&
state.type === '1') ||
(order.type === type.toUpperCase() &&
state.type === type.toUpperCase())
) {
return false;
}
if (!isEqual(order, state)) {
return true;
}
return false;
}
我会这样做
public get isModified(type: 'lower' | 'upper'): boolean {
const isAvailable = type === "lower" ? this.isLowerAvailable : this.isUpperAvailable
const preference = type === "lower" ? "lowerPreference" : "upperPreference";
if (!isAvailable) {
return false;
}
if (
(this.orders[preference].type === '1' &&
this.state.fetchedData[preference].type === '1') ||
(this.orders[preference].type === 'LOWER' &&
this.state.fetchedData[preference].type === 'LOWER')
) {
return false;
}
if (!isEqual(this.orders[preference], this.state.fetchedData[preference])) {
return true;
}
return false;
}
那么调用这个方法的时候
使用isModified(“upper”)
代替isUpperModified
及
使用
isModified(“lower”)
而不是isLowerModified
我会这样做
public get isModified(type: 'lower' | 'upper'): boolean {
const isAvailable = type === "lower" ? this.isLowerAvailable : this.isUpperAvailable
const preference = type === "lower" ? "lowerPreference" : "upperPreference";
if (!isAvailable) {
return false;
}
if (
(this.orders[preference].type === '1' &&
this.state.fetchedData[preference].type === '1') ||
(this.orders[preference].type === 'LOWER' &&
this.state.fetchedData[preference].type === 'LOWER')
) {
return false;
}
if (!isEqual(this.orders[preference], this.state.fetchedData[preference])) {
return true;
}
return false;
}
那么调用这个方法的时候
使用isModified(“upper”)
代替isUpperModified
及
使用
isModified(“lower”)
而不是isLowerModified
是否可以同时显示对这些方法的调用?是否可以同时显示对这些方法的调用?感谢您的回复。你是说“私人修改”而不是私人“得到”修改吗。因为getter不能接受参数。啊,很抱歉:)不应该有get
。感谢您的回复。你是说“私人修改”而不是私人“得到”修改吗。因为getter不能接受参数。啊,对不起:)不应该有get
。