编写一个函数,该函数传递一个对象并返回该对象的数组'的属性

write a function that gets passed an object and returns an array of the object's properties

本文关键字:函数 对象 返回 数组 属性 一个对象 一个      更新时间:2023-09-26

我的家庭作业如下:编写一个"keys"函数,该函数传递一个对象并返回该对象的属性数组。一定要筛选出对象的方法。键数组只有对象的名称/值对的名称。由于跨浏览器问题(旧浏览器不支持),无法使用Objectkeys方法。您的函数应该为所有浏览器提供相同的服务。

我的初始代码如下:

function keys(obj){
  var key="";
  var i = 0;
  var array = [];
  for(i = 1; i<arguments.length; i++){
     for(key in arguments[i]){
         if(obj.hasOwnProperty&&(!_.isArray(obj))){
             obj[key]=arguments[i][key];
         }
     }
  }
  for(var j = 0; j < obj.length; j++){
     for(key in obj[j]){
        array[j] = obj[j];
     }
  }
 return array;
 }

我确信我的函数有很多问题。你能帮我一下吗?非常感谢。

这就是解决方案:

function keys(obj) {
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var properties = [];
    for (var property in obj)
        if (hasOwnProperty.call(obj, property)
            && typeof obj[property] !== "function")
                properties.push(property);
    return properties;
}

上面的代码逐行执行以下操作:

  1. 创建一个空数组properties来保存obj的所有属性的名称
  2. 对于obj的每个属性property,请执行以下操作:
    1. 如果属性property属于obj并且
    2. 如果obj[property]不是函数,则:
      1. 将属性property添加到properties数组中
  3. 返回properties数组

查看演示:http://jsfiddle.net/qVgVn/

您的代码有很多问题。您需要的答案在MDN中:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

该函数完全按照教授的要求执行,并且可以跨浏览器执行。"兼容性"下列出了object.keys的所谓poly-fill或跨浏览器实现。试着整理一下代码,弄清楚它在做什么:)

以下是你自己的代码中的一些问题,我马上就看到了——它可能不是有效的代码,我只是想给你一些关于你做错的事情的指导:

// Name your function something useful and descriptive.
function getKeysAsArray(obj){
  // For starters, dont name a variable "array" - bad practice.
  var key="",
      i = 0,
      results = [];
  // First foor loop unnecessary, do not use arguments here
  // because you already know the name of your argument.
     for(key in obj){
         // See if this browser supports has OwnProperty by using typeof
         // which will fail gracefully, vs what u did which will stop the
         // script from running
         if(typeof Object.hasOwnProperty === 'function'){
             // You probably shouldn't be using underscore _
             if(obj.hasOwnProperty && !(obj instanceof Array)){
                 results.push(obj[key]);
             }
         }
     }
  return results;
}

好了,我开始。。。

function objProps(x){
var arr=[];
for (var k in x) if(typeof x[k] !='function' && x.hasOwnProperty(k)) {arr.push(k);}
return arr;
}

此代码按预期工作。用对象调用它。。。

取出它唯一的非函数键。