设置对象数据结构数组属性

Setting Object Data Structure Array Property

本文关键字:属性 数组 数据结构 对象 设置      更新时间:2023-09-26

经过详尽的搜索,我还没有找到一个明确的答案来解决我的问题。这可能部分是由于对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[].value 是未定义的。

还尝试过:

for (var i = 0; i < NumberArray.length; i++){
    numberStructure[i].value.push(NumberArray[i]);
    println(numberStructure[i].value);
}

那也没用。

您是否正在尝试获取一个 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);

你也可以这样做:

  
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);

你需要尝试这样的事情:

     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);

在破解了 adam0101 的示例后,我决定尝试一下这个"狙击"功能......

        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);