首页 > 试题广场 >

属性遍历

[编程题]属性遍历
  • 热度指数:44490 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)
1、返回数组,格式为 key: value
2、结果数组不要求顺序

输入描述:
var C = function() {this.foo = 'bar'; this.baz = 'bim';}; 
C.prototype.bop = 'bip'; 
iterate(new C());


输出描述:
["foo: bar", "baz: bim"]
示例1

输入

var C = function() {this.foo = 'bar'; this.baz = 'bim';}; 
C.prototype.bop = 'bip'; 
iterate(new C());

输出

["foo: bar", "baz: bim"]
推荐
可以使用for-in来遍历对象中的属性,hasOwnproperty方法能返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性,该属性必须为对象本身的属性。
function iterate(obj) {
     var arr = [];
     //使用for-in遍历对象属性
     for(var key in obj){
         //判断key是否为对象本身的属性
         if(obj.hasOwnProperty(key)){
             //将属性和值按格式存入数组
             arr.push(key+": "+obj[key]);
         }
     }
     return arr;
 }

编辑于 2015-12-11 10:49:16 回复(24)
function iterate(obj) {
    let arr = [];
    for (const [key, value] of Object.entries(obj)) {
       arr.push({ key : value })
    }
    return arr
}
这个怎么不行, 是不是不支持entries方法
发表于 2023-03-02 20:30:01 回复(0)
这题不支持Object.entries函数,吐了
发表于 2022-12-23 15:52:50 回复(0)
主要就是使用obj.hasOwnProperty
function iterate(obj) {
            let arr = []
            for(let i in obj){
                if(obj.hasOwnProperty(i)){
                    arr.push(i + ': ' + obj[i])
                }
            }
            return arr    
}
发表于 2022-11-17 18:00:06 回复(0)
    function iterate(obj) {
        let res = [];
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                res.push(`${key}: ${obj[key]}`);
            }
        }
        return res;
    }

发表于 2022-10-14 13:53:05 回复(0)
function iterate(obj) {
    let a = new Array()
    for (let i in obj) {
        if (!(i in obj.__proto__)) {
            a.push(`${i}: ${obj[i]}`)
        }
    }
    return a
}

发表于 2022-07-28 00:00:21 回复(0)
function iterate(obj) {
    var proto = obj.constructor.prototype
    var arr = [];
    Object.keys(obj).forEach(el=>{
        if(!Object.keys(proto).includes(el)){
            arr.push(el+': '+obj[el]);
        }
    })
    return arr
}

发表于 2022-02-16 09:53:40 回复(0)
function iterate(obj) {
        //方法一:getOwnPropertyNames
    return Object.getOwnPropertyNames(obj).map(function (key) {
        return key + ": " + obj[key];
    });

        //方法二for in和hasOwnProperty
    var res = [];
    for (const key in obj) {
        if (Object.hasOwnProperty.call(obj, key)) {
            const item = '' + key + ': ' + obj[key];
            res.push(item);
        }
    }
    return res;
}

发表于 2022-01-07 14:14:39 回复(0)
function iterate(obj) {
    let result=[],str
    for(prop in obj){
        // prop为obj自有属性且obj原型没有该属性
        if(obj.hasOwnProperty(prop)&&!obj.constructor.prototype.hasOwnProperty(prop)){
            str=`${prop}: ${obj[prop]}`
            result.push(str)
        } 
    }
    return result
}
发表于 2022-01-05 17:16:44 回复(0)
function iterate(obj) {
   let result = [];
    for(key in obj){
        if(obj.hasOwnProperty(key))
        result.push(`${key}: ${obj[key]}`);
    };
    return result;
}

发表于 2021-11-17 15:54:49 回复(0)
function iterate(obj) {
    return Object.entries(obj).map(item => `${item[0]}: ${item[1]}`)
}

发表于 2021-09-20 16:12:49 回复(0)
function iterate(obj) {
    if(Object.entries) return Object.entries(obj).map(([key, value]) => `${key}: ${value}`)
    return Object.keys(obj).map((key) => `${key}: ${obj[key]}`)
}

发表于 2021-09-13 14:53:10 回复(0)
function iterate(obj) {
    let v = []
    for(var i of Object.keys(obj)){
        v.push(i+': '+obj[i])
    }
    return v
}

发表于 2021-08-26 14:15:16 回复(0)
     function iterate(obj) {
            let arr = []
            for (const key in obj) {
                if (Object.hasOwnProperty.call(obj, key)) {
                    const element = obj[key];
                    arr.push(`${key}: ${obj[key]}`)
                }
            }
            return arr
        }

发表于 2021-08-23 10:35:35 回复(0)
// FED54属性遍历

// 描述
// 找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)
// 1、返回数组,格式为 key: value
// 2、结果数组不要求顺序

// 示例1
// 输入:
// var C = function() {this.foo = 'bar'; this.baz = 'bim';}; 
// C.prototype.bop = 'bip'; 
// iterate(new C());

// 输出:
// ["foo: bar", "baz: bim"]

function iterate(obj) {
    // 方法1 遍历obj的属性,用hasOwnProperty属性判断是否仅自己的实例属性
    let ret = [];
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            ret.push(key + ": " + obj[key]);
        }
    }
    return ret;

    // 方法2 用Object.keys方法,仅遍历自己的实例属性
    /*
    ** Object.keys() 方法
    ** 会返回一个由一个给定对象的自身可枚举属性组成的数组,
    ** 数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
    ** 
    ** 语法:    Object.keys(obj)
    ** 
    ** 参数:    obj 要返回其枚举自身属性的对象
    **
    ** 返回值:  一个表示给定对象的所有可枚举属性的字符串数组
    */
    // let properties = Object.keys(obj);
    // let ret = [];
    // for (let key in properties) {
    //     ret.push(properties[key] + ": " + obj[properties[key]]);
    // }
    // return ret;
}

发表于 2021-08-11 14:09:37 回复(0)
function iterate(obj) {
    // Object.keys() 返回当前对象中所有可枚举属性所组成的数组
    return Object.keys(obj).map(key => `${key}: ${obj[key]}`)
}

发表于 2021-08-08 00:34:32 回复(0)