编写一个函数,该函数传递一个对象并返回该对象的数组'的属性
write a function that gets passed an object and returns an array of the object's properties
我的家庭作业如下:编写一个"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;
}
上面的代码逐行执行以下操作:
- 创建一个空数组
properties
来保存obj
的所有属性的名称 - 对于
obj
的每个属性property
,请执行以下操作:- 如果属性
property
属于obj
并且 - 如果
obj[property]
不是函数,则:- 将属性
property
添加到properties
数组中
- 将属性
- 如果属性
- 返回
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;
}
此代码按预期工作。用对象调用它。。。
取出它唯一的非函数键。
相关文章:
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 访问函数对象的上下文属性|如何
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何将函数对象从javascript传递到Polymer元素
- 为什么函数对象的实例没有继承函数原型属性
- 为什么我会从 JavaScript 函数返回一个命名函数(对象)
- 为什么实例构造函数指向最上面的函数构造函数对象
- 使用object.freeze()扩展函数对象-can't添加字段
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- setTimeout()/setInterval()赢得't执行**我正在传递函数对象,而不是执行函数
- 为什么茉莉花间谍不't通过引用解析函数对象
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 在 JavaScript 中为函数对象添加别名
- 在 Express JS 中从路由调用函数对象
- 函数对象的名称属性是什么
- 构造函数对象
- 节点.js - 从另一个函数/对象发出事件
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 函数对象__proto__和原型属性
- 类仿真 - 模块模式与函数对象