在JSON阵列中查找项目并将其添加到另一个阵列。使用Javascript

时间:2016-09-19 04:17:46

标签: javascript arrays json parsing

在JSON数组中查找项目并将其传递给其他数组时遇到一些问题。我得到的错误似乎是它没有正确地将项目传递出函数。它正在数据库中找到该项,我可以在控制台日志中正确地看到它并使用JSON.stringify正确查看它。

尽管如此,无论我如何尝试将其传递出函数(作为字符串,作为对象等),它都不会返回除undefined之外的值。

如果我在newCard上执行console.log,它将始终以未定义的方式返回。

非常感谢您对此的任何帮助。谢谢。

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

}

2 个答案:

答案 0 :(得分: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);
      }
    });
}

答案 1 :(得分:0)

$.each不会返回该功能。将返回的值分配给vraible,然后将其返回。

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 = [
{
	id: '1',
  count: 0
},
{
	id: '2',
  count: 0
},
{
	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>