Javascript 编写一个传递对象并返回对象数组的函数';s属性
我的作业是: 编写一个“keys”函数,用于传递对象并返回对象属性数组。确保筛选出对象的方法。keys数组只有对象的名称/值对的名称。由于跨浏览器问题(旧浏览器不支持),无法使用Objectkeys方法。您的函数应该为所有浏览器提供相同的服务 我的初始代码如下:Javascript 编写一个传递对象并返回对象数组的函数';s属性,javascript,Javascript,我的作业是: 编写一个“keys”函数,用于传递对象并返回对象属性数组。确保筛选出对象的方法。keys数组只有对象的名称/值对的名称。由于跨浏览器问题(旧浏览器不支持),无法使用Objectkeys方法。您的函数应该为所有浏览器提供相同的服务 我的初始代码如下: function keys(obj){ var key=""; var i = 0; var array = []; for(i = 1; i<arguments.length; i++){ for(ke
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;
}
功能键(obj){
var key=“”;
var i=0;
var数组=[];
对于(i=1;i,您的代码有很多问题。您需要的答案在MDN中:
该函数完全按照教授的要求执行,并且可以跨浏览器执行。在“兼容性”下列出了一种称为“多边形填充”或object.keys的跨浏览器实现。请尝试整理该代码以了解它的功能:)
下面是我马上看到的您自己的代码的一些问题-它可能无法正常工作,我只是想给您一些错误操作的指导:
// 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;
}
您的代码有很多问题。您需要的答案在MDN中:
该函数完全按照教授的要求执行,并且可以跨浏览器执行。在“兼容性”下列出了一种称为“多边形填充”或object.keys的跨浏览器实现。请尝试整理该代码以了解它的功能:)
下面是我马上看到的您自己的代码的一些问题-它可能无法正常工作,我只是想给您一些错误操作的指导:
// 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;
}
此代码按预期工作。使用对象调用它
把它唯一不是函数的键拿出来。好的,我来了
function objProps(x){
var arr=[];
for (var k in x) if(typeof x[k] !='function' && x.hasOwnProperty(k)) {arr.push(k);}
return arr;
}
此代码按预期工作。使用对象调用它
只取出非函数的键。这是解决方案:
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]
不是函数,则:
属性
添加到属性
数组中属性
数组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]
不是函数,则:
属性
添加到属性
数组中属性
数组查看演示:您注意到这段代码有什么问题?我不知道自己。但我可以感觉到我的代码不是解决方案。我们可以给您解决方案,但那会作弊,不是吗?请帮助我们解释您尝试了哪些方法,以及为什么。例如,所有这些循环都是为了什么?当您你写的?我想先把所有的参数合并到一个对象中。然后我想把这个对象的所有属性都合并到一个数组中。这是解决问题的正确想法吗?@bfavaretto-我想根据彭汉在这里展示的一些东西,彭汉真的需要研究和观察更有效、更好的代码。这看起来像是一个从各地收集的混乱的集合,只需要很少的理解。我将Penghan指向MDN跨浏览器实现进行研究。你注意到这段代码有什么问题吗?我不知道我自己。但我能感觉到我的代码不是解决方案。我们可以给你解决方案,但那会这是在作弊,不是吗?请帮助我们解释一下你尝试过的方法,以及为什么。例如,所有这些循环都是用来做什么的?你写它们的时候想到了什么?我想先把所有参数合并到一个对象中。然后我想把这个对象的每个属性都合并到一个数组中。这是e关于如何解决问题的想法正确吗?@bfavaretto-我认为根据鹏汉在这里展示的一些东西,鹏汉确实需要研究和寻找更有效、更好的代码。这看起来像是一个从各地收集的混乱的集合,了解很少。我将鹏汉指向MDN跨浏览器实现学习说明。非常感谢。“typeof Object.hasOwnProperty==='function'”是否旨在检查浏览器是否有“.hasOwnProperty”方法?@PenghanYang这是正确的-如果第一级未定义,typeof操作符将允许您查看对象的范围而不中断。例如,如果您试图说(myObject.property)和myObject未定义,您会得到一个错误。但是如果您说,if(typeof myObject.property=='string')和myObject未定义,您只会在if语句中得到一个false。非常感谢。“typeof Object.hasOwnProperty=='function'”的目的是检查浏览器是否具有“.hasOwnProperty”方法?@PenghanYang这是正确的-如果第一级未定义,typeof运算符将允许您查看对象的范围而不会中断。例如,如果您试图说(myObject.property)和myObject是否未定义,您将得到一个错误。但是如果您说(typeof myObject.property=='string'),而且我的对象没有定义,你的if语句中只会出现一个错误。非常深刻的解释。非常感谢!@PenghanYang C