2017-03-22 13 views
0

記事の検証マップがあります。オブジェクトのプロパティとして関数をすべて使用する

var articleMap = { 
    author: function (author) { 
     if(author) { 
      return author.length > 0; 
     } 
    }, 
    title: function (title) { 
     if (!title) { 
      return title.length > 0; 
     } 
    } 
}; 

そして、これが

var article = 
     { 
      id: '1', 
      title: '«Title', 
      summary: 'Summary', 
      createdAt: new Date(2017, 3, 5, 8, 0), 
      author: 'John', 
      content: 'Content', 
      tags: ['tag1', 'tag2'], 
      picture: 'images/id_1.jpeg' 
     }; 

を検証するために、物品の一例であると私はObject.keysごとに使用する場合、それが唯一の最初のキーを使用しています。しかし、私がforEachを使用すると、すべてが問題ありません。また、記事にいくつかのキーがない場合(例えば'content')、私のコードが正しく動作する必要があります。私は何を修正すべきですか?

Object.keys(articleMap).every(function (item) { 
     alert(articleMap[item](article[item])); 
    }); 
+3

これは、あなたが偽であるコールバックから何も返さない( 'undefined')ためです。 – georg

+0

@georg https://jsfiddle.net/q4stx5mn/これは正しいですか? – Vladislav

+0

'if(!title)return title.length> 0;'意味がない – Bergi

答えて

0

あなたはforEachなくevery使用する必要があります。ただ、あなたの情報のため

Object.keys(articleMap).forEach(function (item) { 
     alert(articleMap[item](article[item])); 
    }); 
0

を:

ごとに()メソッドをテストアレイ内のすべての要素が提供さによって実装テストに合格するかどうか関数。

function isBigEnough(element, index, array) { 

    return element >= 10; 
} 

[12, 5, 8, 130, 44].every(isBigEnough); // false 
[12, 54, 18, 130, 44].every(isBigEnough); // true 

一方でつつ:

のforEach()メソッドは、各アレイ要素について一度に設けられた機能を実行します。

var a = ['a', 'b', 'c']; 

a.forEach(function(element) { 
    console.log(element); 
}); 

最初にドキュメントをチェックすることをお勧めします。

関連する問題