2017-03-22 2 views
0

Ich habe Karte für Artikel validieren.Verwenden Sie alle für Funktionen als Objekteigenschaft

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

Und das ist Beispiel für Artikel

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' 
     }; 

zu validieren und wenn ich jeden für Object.keys verwenden verwendet es nur ersten Schlüssel. Aber wenn ich forEach verwende, ist alles in Ordnung. Auch mein Code muss korrekt funktionieren, wenn ich keine Schlüssel im Artikel habe (zum Beispiel 'content'). Was soll ich reparieren?

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

Dies ist, weil Sie nichts ('undefined') aus dem Rückruf zurückgeben, der falsch ist. – georg

+0

@georg https://jsfiddle.net/q4stx5mn/ also ist das richtig? – Vladislav

+0

'if (! Title) return title.length> 0;' macht keinen Sinn – Bergi

Antwort

0

sollten Sie verwenden forEach und nicht every:

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

Nur zur Information:

Die jede() Methode überprüft, ob alle Elemente in der Anordnung den Test durch die vorgesehen umgesetzt passieren Funktion.

function isBigEnough(element, index, array) { 

    return element >= 10; 
} 

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

, während in der anderen Hand:

Die forEach() Methode eine Funktion vorgesehen, einmal für jedes Array-Element ausführt.

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

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

Immer gut, zuerst die Dokumentation zu überprüfen!

Verwandte Themen