js 对象转为js数组 && Object方法

27,940 阅读2分钟
const obj = {
       "phone_num_wxx": "用户手机号",
       "phone_city_wxx": "手机号归属地",
       "sex_wxx": "性别",
       "income_wxx": "收入",
       "age_wxx": "年龄"
   };
   let arr = [];
   Object.keys(obj).forEach(v => {
       let o = {};
       o[v] = obj[v];
       arr.push(o)
   })
console.log(arr)

Object.keys方法是JavaScript中用于遍历对象属性的一个方法 。它传入的参数是一个对象,返回的是一个数组,数组中包含的是该对象所有的属性名。

var cat= { 
name:’mini’, 
age:2, 
color:’yellow’, 
desc:”cute” 
}

console.log(Object.keys(cat)); // ["name", "age", "color", "desc"] 、console.log(Object.values(cat)); // ["’mini", "2", "yellow", "cute"]

1.传入字符串,返回索引

var str = 'ab1234';
console.log(Object.keys(obj));  //[0,1,2,3,4,5]

2.返回一个对象属性数组

var person={
                firstName:"David",
                lastName:"Walsh",
                others:"Smith"
            };
            Object.keys(person).forEach(function(trait){
                console.log('person',trait,':',person[trait]);
            });

3.遍历字符串

var str = 'zhanglong';
Object.keys(str).forEach(function (item,index) {
    switch (index) {
        case 0 : alert(str[item]);//z
    }

})
/////////////////////////
4.
// 类数组对象,就是含 length 和索引属性的对象
// 类数组对象转化为数组
let obj22 = {
 '0': 3,
 '1': 13,
 '2': 23,
 '3': 33,
 'length': 4
}
//call结合forEach 输出类数组的属性值
Array.prototype.forEach.call({ 0: 'array', 1: 'like', length }, function(el){
   console.log(el)  // array  like
});


for (var i = 0; i < obj22.length; i++) {
    console.log('类数组对象' + obj22[i])
}
console.log([].slice.apply(obj22))// [3, 13, 23, 33]
console.log(Array.prototype.slice.call(obj22));// [3, 13, 23, 33]
// Array.from方法:可以将类数组对象和可迭代对象转换为数组    
console.log(Array.from(obj22))//[3, 13, 23, 33]

 var obj = {
            a:1,
            b:2,
            c:3
        }

    for (i in obj) {    
        console.log(i + obj[i]);//循环输出键 和 值   //a1 b2 c3  
    }
    var arr = [];
    var obj2 = {};
    console.log(Object.keys(obj));//输出键数组 ["a", "b", "c"]
    Object.keys(obj).forEach(function (item,index) {
     obj2[item] = obj[item];    
        arr.push(obj2);
    })


    // var obj = {}    
    // var arr = [];
    //  obj.name = 'maole';
    // arr.push(obj)
    // console.log(arr);
    // var a = delete obj.name;//输出布尔值   

Object得所有方法

1.Object.keys()ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名。

var obj = { foo: "bar", baz: 42 };  
Object.keys(obj)  
// ["foo", "baz"]  

ES7 有一个提案,引入了跟Object.keys配套的Object.values和Object.entries。

2.Object.values()

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值。正好与Object.keys相对接

var obj = { foo: "bar", baz: 42 };  
Object.values(obj)  
// ["bar", 42]  

//返回数组的成员顺序
var obj = { 100: 'a', 2: 'b', 7: 'c' };  
Object.values(obj)  
// ["b", "c", "a"]  
//属性名为数值的属性,是按照数值大小,从小到大遍历的,因此返回的顺序是b、c、a

3.Object.entries

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值对数组。

var obj = { foo: 'bar', baz: 42 };  
Object.entries(obj)  
//Object.values会过滤属性名为 Symbol 值的属性。  
Object.values({ [Symbol()]: 123, foo: 'abc' });  
// ['abc']  

developer.mozilla.org/zh-CN/docs/…

4.Object.defineProperty(obj, prop, desc) 的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
参数描述: obj 需要定义属性的当前对象
prop 当前需要定义的属性名
desc 属性描述符
一般通过为对象的属性赋值的情况下,对象的属性可以修改也可以删除,但是通过Object.defineProperty()定义属性,通过描述符的设置可以进行更精准的控制对象属性。
desc 属性描述符:

通过Object.defineProperty()为对象定义属性,有两种形式,且不能混合使用,分别为数据描述符,存取描述符,下面分别描述下两者的区别:
数据描述符 --特有的两个属性(value,writable)

    let op = {}
        Object.defineProperty(
        op,//要操作的对象
        'age',//给当前对象定义的属性名
        {
            value: 1234,
            writable: true  // 是否可以改变属性值,writable默认为false
        })  //输出{age: 1234}
        
        若是把writable = false
                op.age = 11;
                console.log(op.age) //1234    op.age = 1 没有生效,所以将writable = fasle  不能改变已经定义属性值
        

存取描述符 --是由一对 getter、setter 函数功能来描述的属性:

get:一个给属性提供getter的方法,如果没有getter则为undefined。该方法返回值被用作属性值。默认为undefined。
set:一个给属性提供setter的方法,如果没有setter则为undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认值为undefinedlet Person = {}
let temp = null
Object.defineProperty(Person, 'name', {
  get: function () {   get和set在此处就相当于writable = true
    return temp
  },
  set: function (val) {
    temp = val
  }
})
Person.name = 123;
console.log(Person.name) //123

数据描述符和存取描述均具有以下描述符
configrable 描述属性是否配置,以及可否删除
enumerable 描述属性是否会出现在for in 或者 Object.keys()的遍历中

let oop = {}
    Object.defineProperty(
           oop,
          'age',
          {
            value: 121323,
            writable:true,
            configurable:true  //configurable为true时可以删除定义的属性值,默认为false则不能删除
          }
    )
    delete oop.age;
    console.log(oop.age); undefined

www.jianshu.com/p/8fe1382ba…