2016-09-19 5 views
0

JSON配列内の項目を見つけて別の配列に渡す際に問題があります。私が得ているエラーは、関数から項目を正しく渡していないことが原因です。データベース内の項目を検索しています。コンソールログで正しく表示され、JSON.stringifyで正しく表示できます。JSON配列内の項目を検索し、別の配列に追加します。 Javascript

私は関数から(文字列、オブジェクトなどとして)それを渡すことを試みたとしても、未定義以外の値を返すわけではありません。

newCardでconsole.logを実行すると、常にundefinedとして返されます。

これについてのお手伝いをさせていただきます。ありがとうございます。

var deckObject = []; 
var newCard = findCard('EX1_123'); 
deckObject.push(newCard); 

function findCard(cardId){ 
    $.each(cardDB, function(i, v) { 
     if (v.id === cardId) {  
     v['count'] = 1; 
     return v; 
     } 
    }); 

} 

答えて

1

するのではなく、関数の外に戻らない非同期コードに

var deckObject = []; 
var newCard = findCard('EX1_123',function(newcard){ 
    deckObject.push(newCard); 
}); 

function findCard(cardId,callback){ 
    $.each(cardDB, function(i, v) { 
     if (v.id === cardId) {  
     v['count'] = 1; 
     callback(v); 
     } 
    }); 
} 
0

$.eachを管理するためにコールバックを使用して、ループから値を返すことはありません。戻り値を変数に代入してから返す。

function findCard(cardId){ 

    var res = $.each(cardDB, function(i, v) { 

     if (v.id === cardId) { 
     console.log(v.id); 
     v['count'] = 1; 
     return v; 
     } 
    }); 
    return res; 

} 

サンプルスニペット。

$(function(){ 
 
var cardDB = [ 
 
{ 
 
\t id: '1', 
 
    count: 0 
 
}, 
 
{ 
 
\t id: '2', 
 
    count: 0 
 
}, 
 
{ 
 
\t id: '3', 
 
    count: 0 
 
} 
 

 
] 
 
var deckObject = []; 
 
var newCard = findCard('1'); 
 
console.log(newCard); 
 
deckObject.push(newCard); 
 

 
function findCard(cardId){ 
 
    
 
    var opt = $.each(cardDB, function(i, v) { 
 
     
 
     if (v.id === cardId) { 
 
     console.log(v.id); 
 
     v['count'] = 1; 
 
     return v; 
 
     } 
 
    }); 
 
    return opt; 
 

 
} 
 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

関連する問題