Object.keys(obj)对象获取key的时候顺序会乱

Object.keys(obj)对象获取key的时候顺序会乱,第1张

项目中Objectkeys(obj)或者key的时候,正数是正常的,负数顺序就乱了

查了半天好像是因为对象属性的问题

获取的接口是正确的顺序

打印Objectkeys(obj)的顺序为

改成

就好了

如果是使用了  JQ  EXTJS 的话本身就有 对象克隆的 函数库可以使用  如 extjs 使用

extuxutilclone()

没有用这些的话 可以自己写一个 克隆函数  网上有资源  比如

function deepClone(obj){    var result={},oClass=isClass(obj);

    // if(oClass==="Object"){

    //     result={};

    // }else if(oClass==="Array"){

    //     result=[];

    // }else{

    //     return obj;

    // }

    for(key in obj){

        var copy=obj[key];

        if(isClass(copy)=="Object"){

            result[key]=argumentscallee(copy);

        }else if(isClass(copy)=="Array"){

            result[key]=argumentscallee(copy);

        }else{

            result[key]=obj[key];

        }

    }

    return result;

}

function isClass(o){

    if(o===null) return "Null";

    if(o===undefined) return "Undefined";

    return ObjectprototypetoStringcall(o)slice(8,-1);

}

或者参考 extjs 的方法

 function(o) {  

   if(!o || 'object' !== typeof o) {        return o;    }   

    if('function' === typeof oclone) {        return oclone();    }   

     var c = '[object array]' === objectprototypetostringcall(o)  [] : {};

     var p, v;    

     for(p in o) {       

      if(ohasownproperty(p)) {            v = o[p];           

      if(v && 'object' === typeof v) {               

       c[p] = extuxutilclone(v);          

         }     else {          

               c[p] = v;          

           }        

           }   

            }  

        return c;};

先写一个从字符串生成任何类型的对象的函数 public object stringToObject(string str,Type objectType)//传递两个参数,一个是字符串含有每个属性的属性名和值对,属性和值用冒号分隔,属性与属性用逗号分隔,另一个参数是要创建的对象的类型 { string[] shuxing = strSplit(new char[] { ',' });//将字符串分解成 “属性:值”数组 for (int i = 0; i < shuxingLength; i++) { shuxing[i]= shuxing[i]Replace("\"", ""); }//去掉字符串的双引号 object obj = SystemActivatorCreateInstance(objectType); //使用反射动态创建对象 PropertyInfo[] pis =obj GetType()GetProperties(BindingFlagsPublic|BindingFlagsInstance);//获得对象的所有public属性 if (pis != null)//如果获得了属性 foreach (PropertyInfo pi in pis)//针对每一个属性进行循环 { for (int i = 0; i <shuxingLength; i++)//检查字符串中的所有“属性:值”列表 { if (shuxing[i]Split(new char[] { ':' })[0] == piName)//如果对象的属性名称恰好和字符串中的属性名相同 { Type proertyType= piPropertyType; //获得对象属性的类型 piSetValue(obj, ConvertChangeType(shuxing[i]Split(new char[] { ':' })[1],proertyType), null); //将字符串中的字符串类型的“值”转换为对象属性的类型,并赋值给对象属性 } } } return obj; }

我给你来一段吧 自己写的 给分啊先写一个从字符串生成任何类型的对象的函数public object stringToObject(string str,Type objectType)//传递两个参数,一个是字符串含有每个属性的属性名和值对,属性和值用冒号分隔,属性与属性用逗号分隔,另一个参数是要创建的对象的类型{string[] shuxing = strSplit(new char[] { ',' });//将字符串分解成 “属性:值”数组for (int i = 0; i < shuxingLength; i++){shuxing[i]= shuxing[i]Replace(\, );}//去掉字符串的双引号object obj = SystemActivatorCreateInstance(objectType); //使用反射动态创建对象PropertyInfo[] pis =obj GetType()GetProperties(BindingFlagsPublic|BindingFlagsInstance);//获得对象的所有public属性if (pis != null)//如果获得了属性foreach (PropertyInfo pi in pis)//针对每一个属性进行循环{for (int i = 0; i <shuxingLength; i++)//检查字符串中的所有“属性:值”列表{if (shuxing[i]Split(new char[] { ':' })[0] == piName)//如果对象的属性名称恰好和字符串中的属性名相同{Type proertyType= piPropertyType; //获得对象属性的类型piSetValue(obj, ConvertChangeType(shuxing[i]Split(new char[] { ':' })[1],proertyType), null);//将字符串中的字符串类型的“值”转换为对象属性的类型,并赋值给对象属性}}}return obj;}然后调用这个函数定义一个学生类class stu{string _name;int _age;public string name{get{return _name;}set {_name=value;}}public int age{get { return _age; }set { _age = value; }}}pageload里面可以使用下面方法创建stu对象了由于使用了反射技术需要导入名字空间 using SystemReflection;using using SystemReflection;。。。。。。。

以上就是关于Object.keys(obj)对象获取key的时候顺序会乱全部的内容,包括:Object.keys(obj)对象获取key的时候顺序会乱、js中如何复制一个对象并获取其所有属性和属性对应的值、c#如何利用反射动态获取对象属性的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9872542.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存