0

私の宿題は次のようなものです: オブジェクトを渡され、オブジェクトのプロパティの配列を返す「キー」関数を書きます。オブジェクトのメソッドを除外してください。キー配列には、オブジェクトの名前と値のペアの名前のみが含まれます。クロス ブラウザの問題 (古いブラウザではサポートされていない) のため、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;
 }

私の機能には多くの問題があると確信しています。それを手伝ってくれませんか?ありがとうございました!

4

3 に答える 3

1

あなたのコードには多くの問題があります。ただし、必要な答えは MDN にあります: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

その関数は、教授が要求したことを正確に実行し、クロスブラウザーで実行します。「互換性」の下に記載されている 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;
}
于 2013-08-21T01:17:23.750 に答える
1

よし、行きます...

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

このコードは期待どおりに機能します。オブジェクトで呼び出す...

関数ではない唯一のキーを取得します。

于 2013-08-21T01:29:11.227 に答える