2016-05-31 4 views
0

私は関数sortに問題があります。私は多分それを良い方法で使用しないであろうので、この小さな問題を解決する方法を尋ねます。これは、私は、あなたがそのプロパティによってオブジェクトをソートしたい場合は、それに関数を渡す方法sort作品必要読むJavascriptで配列をソートできませんプロパティ

Uncaught TypeError: Cannot read property 'sort' of undefined

$(document).ready(function() { 
 

 
    var c_user_list = $('.user-list') 
 
    element_html_template = '<div class="user-item"><img src="" /><h3>name</h3><p></p></div>'; 
 

 

 
    users = [{ 
 
    "name": "Tichus Findley", 
 
    "age": 17, 
 
    "color": "8BC34A", 
 
    "avatar": "http://findicons.com/files/icons/1072/face_avatars/300/i02.png" 
 
    }, { 
 
    "name": "Dick stanson", 
 
    "age": 28, 
 
    "color": "3F51B5", 
 
    "avatar": "http://findicons.com/files/icons/1072/face_avatars/300/g02.png" 
 
    }, { 
 
    "name": "John Williams", 
 
    "age": 25, 
 
    "color": "F44336", 
 
    "avatar": "http://findicons.com/files/icons/1072/face_avatars/300/g01.png" 
 
    }, { 
 
    "name": "Peter macgreirson", 
 
    "age": 36, 
 
    "color": "4197f5", 
 
    "avatar": "http://findicons.com/files/icons/1072/face_avatars/300/i04.png" 
 
    }, { 
 
    "name": "Denny peterson", 
 
    "age": 16, 
 
    "color": "FF5722", 
 
    "avatar": "http://findicons.com/files/icons/1072/face_avatars/300/i05.png" 
 
    }] 
 

 
    function buildUserItem(user) { 
 
    var element_template = $(element_html_template); 
 
    $('.user-list').append(element_template); 
 
    element_template.find("h3").text(user.name); 
 
    element_template.find("p").text("Age :" + user.age); 
 
    element_template.find("img").prop("src", user.avatar) 
 
    element_template.find("img").css("background-color", "#" + user.color) 
 
    } 
 

 

 
    for (i = 0; i < users.length; i++) { 
 
    buildUserItem(users[i]); 
 
    } 
 
    $('.normale').click(function retourNormale() { 
 
    c_user_list.html(""); 
 
    for (i = 0; i < users.length; i++) { 
 
     buildUserItem(users[i]); 
 
    } 
 
    }) 
 

 
    $('.majeur').click(function triMajeur() { 
 
    var triMajUser = users; 
 
    c_user_list.html(""); 
 
    for (i = 0; i < triMajUser.length; i++) { 
 
     if (triMajUser[i].age > 18) { 
 
     buildUserItem(triMajUser[i]); 
 
     } 
 
    } 
 
    }) 
 

 
    $('.Pprenom').click(function triMajeur() { 
 
    var triPprenomUser = users; 
 
    c_user_list.html(""); 
 
    for (i = 0; i < triPprenomUser.length; i++) { 
 
     if (triPprenomUser[i].name.match(/p/gi)) { 
 
     buildUserItem(triPprenomUser[i]); 
 
     } 
 
    } 
 
    }) 
 

 
    $('.alphabetique').click(function triAlphabetique() { 
 
    var triAlphabetique = users; 
 
    c_user_list.html(""); 
 
    triAlphabetique.name.sort(); 
 

 
    for (i = 0; i < triAlphabetique.length; i++) { 
 
     buildUserItem(triAlphabetique[i]); 
 

 
    } 
 

 
    }) 
 

 

 
})
.user-item { 
 
    height: 50px; 
 
    width: 400px; 
 
    position: relative; 
 
    background-color: #9E9E9E; 
 
    padding: 10px; 
 
    border-bottom: solid 1px black; 
 
} 
 
.user-item img { 
 
    height: 40px; 
 
    width: 40px; 
 
    background-color: #3F51B5; 
 
    border-radius: 50%; 
 
    position: absolute; 
 
} 
 
.user-item p { 
 
    position: absolute; 
 
    margin: 0px; 
 
    top: 30px; 
 
    left: 80px; 
 
} 
 
.user-item h3 { 
 
    margin: 0px; 
 
    position: absolute; 
 
    left: 80px; 
 
    font-size: 15px; 
 
    font-family: 'helvetica' 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1> 
 
Lister des utilisateurs 
 
</h1> 
 
<p> 
 
    Mettez des actions sur les boutons. Le HTML présent dans la div .user-list n'est la que pour montrer la structure du conteneur, vous devrez générer vous même ce contenu. Supprimer donc l'intégralité du contenu de .user-list quand vous commencez. Un tableau 
 
    d'object d'utilisateur a été créée pour vous 
 
</p> 
 

 
<div class="user-list"> 
 

 
</div> 
 

 
<button class="majeur"> 
 
    Afficher seulement les mecs qui ont plus de 18 ans 
 
</button> 
 
<button class="Pprenom"> 
 
    Afficher seulement les mec qui on un P dans leurs nom 
 
</button> 
 
<button class="alphabetique"> 
 
    Afficher dans l'ordre alphabetique 
 
</button> 
 
<button class="normale"> 
 
    Revenir à la normale 
 
</button>

+1

ここに関連コードを追加してください。 –

+0

あなたのコードをここに追加しましたが、なぜJSFiddleリンクを投稿できないのか注意を払ってください。あなたのコードは、外部ソースだけでなく、あなたの質問に投稿する必要があります。 –

+0

配列には 'name'プロパティがありません。そのため、 'triAlphabetique.name'は' undefined'です。 'name'プロパティでオブジェクトをソートしますか? –

答えて

0

を取得エラーです。参照:http://jsfiddle.net/bzfue34m/35/

triAlphabetique.sort(function(a, b) { 
    var nameA = a.name.toUpperCase(); // ignore upper and lowercase 
    var nameB = b.name.toUpperCase(); // ignore upper and lowercase 
    if (nameA < nameB) { 
    return -1; 
    } 
    if (nameA > nameB) { 
    return 1; 
    } 

    // names must be equal 
    return 0; 
); 
+0

ここでaとbはどういう意味ですか? –

+0

コールバックは、アイテムaが最初にソートされる場合は0より小さい数値を返し、アイテムbが最初にソートされる場合はアイテムがゼロ以上であればゼロを返します。 –

+0

@MaximeTurquetilは私がリンクした記事を読んだ。 sortは比較関数をとり、aとbは配列の要素です。 – Danmoreng

関連する問題