我有一个对象"区域" (将是世界上不同的地区),我将会有一系列具有我应用的各种属性的数据。
我希望包含代码的对象列表可以执行各种操作,例如规范化内部数据和添加权重。
这里我有TTT(总旅行时间),TJL(总行程长度)和PeaceIndex(某处有多危险)作为属性。
一旦我获得了整个列表,我就会将它们相互排列,从而开始标准化。
function region(TTT, TJL, peaceIndex) {
var n = function (TTTtopvalue,TTTbottomvalue,TTT) {
var colVal = parseFloat(TTT);
var numerator = colVal - TTTbottomvalue; //Once you have the extremes 33, 55, 56, 77 e.g. 33 and 77 then (value-min)/(max-min) 55-33=22/77-33= 22/50 = .4 whatever
var denominator = TTTtopvalue - TTTbottomvalue;
var result = numerator/denominator
this.TTTnormal =result ;
}
this.TTT = TTT;
this.TJL = TJL;
this.TTTnormal = 0;
this.TTTtopvalue = 0;
this.TTTbottomvalue = 0;
this.peaceIndex = peaceIndex;
this.normaliseTTT = n;
}
var r1 = new region(45, 33, 50);
var r2 = new region(40, 30, 55);
var r3 = new region(333, 100, 1);
var testArray = [r1, r2, r3];
console.log(JSON.stringify(testArray));
testArray[0].TTTtopvalue = 333;
testArray[0].TTTbottomvalue = 40;
testArray[0].normaliseTTT(333,40,45); //this works for TTT!!
console.log(JSON.stringify(testArray));
testArray.sort(function(a, b){
return a.TTT-b.TTT
})
console.log(JSON.stringify(testArray));
现在,这对TTT专栏非常有用。但是,它与TJL和peaceIndex列的代码相同。
我似乎无法使用该匿名函数将规范化值返回给其他属性。
我该怎么做?
所以原型将是
function (topvalue,bottomvalue,TTT or TJL or peaceIndex)
每次保存输入的东西
答案 0 :(得分:2)
关注点分离就是答案。您需要一个表示标准化值的单独类。
function NormalizedValue(value, top, bottom) {
this.init(value, top, bottom);
}
NormalizedValue.prototype.init = function (value, top, bottom) {
value = parseFloat(value);
top = parseFloat(top);
bottom = parseFloat(bottom);
this.value = value;
this.normalized = (value - bottom) / (top - bottom);
}
然后
function Region(name) {
this.name = name;
this.TTT = new NormalizedValue();
this.TJL = new NormalizedValue();
this.peaceIndex = new NormalizedValue();
}
var r1 = new Region("A");
var r2 = new Region("B");
var r3 = new Region("C");
r1.TTT.init(333, 40, 45);
r1.TJL.init(40, 30, 25);
r1.peaceIndex.init(1, 5, 1);
// and so on for the others...
然后,例如
testArray.sort(function (a, b) {
return a.TTT.normalized - b.TTT.normalized;
});
你可以用不同的方式构造你的Region
构造函数,以便可以将更多的init值作为参数传递,但要注意它不要太乱(10参数构造函数不是很好的东西)。