【问题标题】:Nodejs splice JSON elements not working wellNodejs拼接JSON元素效果不佳
【发布时间】:2014-08-26 12:24:19
【问题描述】:

我有以下 nodejs 函数,它检索 api 的数据 (JSON) 并尝试擦除所有 0 Balance 元素并将 JSON 发送到前端。

app.get('/getapibittrex', function(req, res){

  var url="https://bittrex.com/api/v1/account/getbalances?apikey="+req.query.apikey;                
                  request({
                    url: url,
                    json: true
                }, function (error, response, body) {

                    if (!error && response.statusCode === 200) {
                            var datos= body.result;

                            for ( var i = 0 ; i < datos.length; i++ ) {
                                if (datos[i].Balance==0)  {
                                    datos.splice(i,1);
                                }
                            }   

                            res.send(datos);
                    } else  { 
                    console.log("Error calling API: "+error);
                    }
                });

});

另一方面,当我调用此函数时,我得到的元素余额为 0!我现在得到的是:

[
  {
    "Currency": "BTC",
    "Balance": 0.15080873,
    "Available": 0.143913061,
    "Pending": 0,
    "CryptoAddress": "1BtAz5AXbA4yvuSMneeSFnwdCGoHiSF6dA",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "BOST",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "BBdyTs52CmfX9MW1e8rYvoEFBvXByVYXaQ",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "VOOT",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "VDcdFniPZnfqT5jYVQsmqTfRXFpcGarKc5",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "CLOAK",
    "Balance": 561.25771864,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "C3SkQ7uv1kZU7ZnpdcvCT2NYpFAqrR2Qdm",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "LOL",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "LdTMw3czCvmmKJCSCgkC2sFsRPz91x7tPp",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "HPY",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "HS38GKGBKrraiNbyPHM1gmruCtA8N7B7PW",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "ATH",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "AY9P5Q3MhfsFG959UrEd6UV9nfVnmgjrBD",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "PTC",
    "Balance": 14467.59987795,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": null,
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "RZR",
    "Balance": 45.18269779,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": null,
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "KORE",
    "Balance": 4923.65705238,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": null,
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "TAC",
    "Balance": 4744.48127806,
    "Available": 4744.48127806,
    "Pending": 0,
    "CryptoAddress": "TcuQAW5QqCHwtpiGDU6uaox8eG3z3zvugZ",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "AERO",
    "Balance": 0,
    "Available": 0,
    "Pending": 0,
    "CryptoAddress": "APgKhLWQs1sdbgPHqs228nVdbH3B3xDBrM",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  },
  {
    "Currency": "SC",
    "Balance": 1620.08759994,
    "Available": 336.88682308,
    "Pending": 0,
    "CryptoAddress": "BFUWs4gnZpB8Qb7RoiYjnst1iSqHCRC6Ec",
    "Requested": false,
    "Uuid": "4662193c-2ca1-4729-beb8-85a373a9879e"
  }
]

一定有我遗漏的东西...... 问候,

【问题讨论】:

  • 在迭代时更改集合是个坏主意。说真的:)。
  • 当然,@YuryTarabanko 的意思是,您在迭代数组时会对其进行变异,因此您会在对其部分进行操作时修改它的长度。这总是会产生意想不到的结果,因为i 增加了一次,但它的相关引用每次删除都会减少一次以上,并且长度正在减少。请参阅:jsfiddle.net/jaZNY 注意它只运行了 3 次迭代?

标签: javascript json node.js splice


【解决方案1】:

您可以使用Array.prototype.filter,不要重新发明轮子。

var datos = body.result.filter(function(data){
    return !!data.Balance;
});

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 2021-07-28
    • 2020-01-23
    • 1970-01-01
    • 2017-04-29
    • 2012-01-19
    • 2021-08-18
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多