经过详尽的搜索,我还没有找到解决问题的明确答案。这可能部分是由于对javascript术语的错误或不精确的引用,因为面向对象的编程对我来说是新的。
var numArray = [0.123456789, 31.415, 314.15, -314.15, 0.0, 0, 1, 10, 100];
var AlignDecimal = function(NumberArray){
var numberStructure = [{
value:0,
toString:"",
decimalIndex:-1,
integer:"",
integerLength:-1,
mantissa:"",
mantissaLength:-1,
sign:""
}];
for (var i = 0; i < NumberArray.length; i++){
numberStructure[i].value = NumberArray[i];
println(numberStructure[i].value);
}
};
AlignDecimal(numArray);
我希望从上面得到足够的信息来确定我的最终编程目标。
最初我试过了:
numberStructure.value = NumberArray
除了.value已成为数组而不是numberStructure []。value之外,这部分有效。
然后我尝试了:
numberStructure = NumberArray
现在numberStructure []数组收到了NumberArray [],但很明显,numberStructure []。值未定义。
也尝试过:
for (var i = 0; i < NumberArray.length; i++){
numberStructure[i].value.push(NumberArray[i]);
println(numberStructure[i].value);
}
那也不起作用。
答案 0 :(得分:2)
您是否正在尝试获取一组numberStructure对象,numArray中的每个数字对应一个?如果是这样,这是一种方法:
var numArray = [0.123456789, 31.415, 314.15, -314.15, 0.0, 0, 1, 10, 100];
var AlignDecimal = function(NumberArray){
function numberStructure(){
this.value = 0;
this.toString = "";
this.decimalIndex = -1;
this.integer = "";
this.integerLength = -1;
this.mantissa = "";
this.mantissaLength = -1;
this.sign = "";
};
var numberStructureArray = [];
for (var i = 0; i < NumberArray.length; i++){
var numStruct = new numberStructure();
numStruct.value = NumberArray[i];
numberStructureArray.push(numStruct);
document.writeln(numberStructureArray[i].value + '<br/>');
}
};
AlignDecimal(numArray);
&#13;
你也可以这样做:
var numArray = [0.123456789, 31.415, 314.15, -314.15, 0.0, 0, 1, 10, 100];
var AlignDecimal = function(NumberArray){
var numberStructureArray = [];
for (var i = 0; i < NumberArray.length; i++){
numberStructureArray.push({
value:NumberArray[i],
toString:"",
decimalIndex:-1,
integer:"",
integerLength:-1,
mantissa:"",
mantissaLength:-1,
sign:""
});
document.writeln(numberStructureArray[i].value + '<br/>');
}
};
AlignDecimal(numArray);
&#13;
答案 1 :(得分:0)
你需要尝试这样的事情:
var numArray = [0.123456789, 31.415, 314.15, -314.15, 0.0, 0, 1, 10, 100];
var numberStructureObj=[];
var AlignDecimal = function(NumberArray){
var numStruct=[];
for (var i = 0; i < NumberArray.length; i++){
var numberStructure = {// create a new object every time then assign the value
value:0,
toString:"",
decimalIndex:-1,
integer:"",
integerLength:-1,
mantissa:"",
mantissaLength:-1,
sign:""
};
numberStructure.value=NumberArray[i];
numberStructureObj.push(numberStructure);
}
console.log(numberStructureObj);// object with assigned values and rest of the fields.
document.writeln(JSON.stringify(numberStructureObj));// see objects in string format
};
AlignDecimal(numArray);
&#13;
答案 2 :(得分:0)
在用adam0101的例子进行黑客攻击之后,我决定试试这个“snipet”功能......
var numArray = [0.123456789,
31.415,
314.15,
-314.15,
0.0,
0,
1,
10,
100,
10000,
-1000];
var AlignDecimal = function(NumberArray, DecimalPlaces){
var integerLengthMax = -1;
var mantissaLengthMax = -1;
var numberStructure = function(){
this.value = 0;
this.valueAbs = 0;
this.toString = "";
this.decimalIndex = -1;
this.integer = "";
this.integerLength = -1;
this.mantissa = "";
this.mantissaLength = -1;
this.sign = "";
this.formattedResult = "";
};// end numberStructure
var numberStructureArray = [];
for (var i = 0; i < NumberArray.length; i++){
var numStruct = new numberStructure();
if(NumberArray[i] < 0){
numStruct.sign = "-";
}else if(NumberArray[i] > 0){
numStruct.sign = " "; // make optional for +
}else{
numStruct.sign = " ";
}// end if(NumberArray[i] <> 0 ...
var power = Math.pow(10, DecimalPlaces);
var rounded = (Math.round(NumberArray[i]*power))/power;
numStruct.value = rounded;
numStruct.valueAbs = Math.abs(rounded);
numStruct.toString = numStruct.valueAbs.toString();
if(numStruct.toString.indexOf(".") < 1){
numStruct.toString += ".0";
}
numStruct.decimalIndex = numStruct.toString.indexOf(".");
var splitNum = numStruct.toString.split(".");
numStruct.integer = numStruct.sign + splitNum[0];
numStruct.integerLength = numStruct.integer.length;
numStruct.mantissa = splitNum[1];
numStruct.mantissaLength = numStruct.mantissa.length;
numberStructureArray.push(numStruct);
}// end for (var i = 0; i < NumberArray.length; i++)
// scan array for max integer and mantissa lengths:
for(var i = 0; i < numberStructureArray.length; i++){
if(numberStructureArray[i].integerLength > integerLengthMax){
integerLengthMax = numberStructureArray[i].integerLength;
}
if(numberStructureArray[i].mantissaLength > mantissaLengthMax){
mantissaLengthMax = numberStructureArray[i].mantissaLength;
}
}// end for(var i = 0; i < numberStructureArray.length
// format number to align decimals:
document.write('<pre>');
for(var i = 0; i < numberStructureArray.length; i++){
// prepend spaces to integer component:
while(numberStructureArray[i].integerLength < integerLengthMax){
//
numberStructureArray[i].integer = " " + numberStructureArray[i].integer;
numberStructureArray[i].integerLength = numberStructureArray[i].integer.length;
}// end while(numberStructureArray[i].integerLength < integerLengthMax
// append "0" to mantissa component:
while(numberStructureArray[i].mantissaLength < mantissaLengthMax){
numberStructureArray[i].mantissa += "0";
numberStructureArray[i].mantissaLength = numberStructureArray[i].mantissa.length;
}// end while(numberStructureArray[i].mantissaLength < mantissaLengthMax
// concatenate formatted integer + decimal + mantissa:
numberStructureArray[i].formattedResult = numberStructureArray[i].integer + "." + numberStructureArray[i].mantissa;
document.writeln(numberStructureArray[i].formattedResult);
}// end for(var i = 0; i < numberStructureArray.length
document.write('</pre>');
};// end var AlignDecimal = function
AlignDecimal(numArray, 1);