Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS代码返回错误_Javascript_Parse Platform - Fatal编程技术网

Javascript JS代码返回错误

Javascript JS代码返回错误,javascript,parse-platform,Javascript,Parse Platform,我是JS新手,我不得不将其用于云代码解析功能。我有一个名为“user_picture”的类,通过代码查询所有对象,并遍历其“City”属性。我希望响应是一组独特的城市名称。不管怎样,下面是我正在编写的代码: Parse.Cloud.define("cities", function(request, response) { var query = new Parse.Query("user_picture"); query.find({ success: function(results) {

我是JS新手,我不得不将其用于云代码解析功能。我有一个名为“user_picture”的类,通过代码查询所有对象,并遍历其“City”属性。我希望响应是一组独特的城市名称。不管怎样,下面是我正在编写的代码:

Parse.Cloud.define("cities", function(request, response) {
var query = new Parse.Query("user_picture");
query.find({
success: function(results) {
    var cities = new Array();

    for (var object in results){
        var tempArray = [object.get("city")];

        if (cities.length > 0){
            for (var i = 0; i < cities.length; i++){
                if (cities[i].get("city") == object.get("city")) {
                    break;
                } else if (i == cities.length-1) {
                    cities = cities.concat(tempArray);
                }
            }
        }
    }   
    response.success (cities);
}, error: function() {
    response.error("Error");
}
});});

并且响应返回null。我试着从结果数组中打印一个对象,以确保我收到了正确的查询,并且它可以很好地打印城市。有什么问题吗

for in循环迭代对象文本的所有键。由于
results
是一个数组,它将遍历数组的键,这些键是“0”、“1”等

这意味着
对象
变量将保存这些关键值。因为它们不是对象,所以它们没有名为get的方法

您需要一个
forEach
循环

results.forEach(function(object){
    var tempArray = [object.get("city")];

    if (cities.length > 0){
        for (var i = 0; i < cities.length; i++){
            if (cities[i].get("city") == object.get("city")) {
                break;
            } else if (i == cities.length-1) {
                cities = cities.concat(tempArray);
            }
        }
    }
}  
results.forEach(函数(对象){
var tempArray=[object.get(“city”);
如果(cities.length>0){
对于(变量i=0;i
}))

或者,如果您的目标是ES3,那么您应该使用for循环

for(var i = 0, length = results.length; i< length; i++){
    var object = results[i];

    var tempArray = [object.get("city")];

    if (cities.length > 0){
        for (var i = 0; i < cities.length; i++){
            if (cities[i].get("city") == object.get("city")) {
                break;
            } else if (i == cities.length-1) {
                cities = cities.concat(tempArray);
            }
        }
    }
}
for(var i=0,length=results.length;i0){
对于(变量i=0;i
我记得曾经使用过Parse对象,似乎有时可以将它们作为对象(通过直接参数访问)访问,有时还可以使用
get
方法访问,看起来您将数组访问和对象(通过Parse)访问方法混为一谈

此外,您的列表生成器似乎并不是真正在构建一个唯一的列表。您只需检查当前城市是否与要添加的城市相同

我可能会做更多类似的事情(对于成功方法):

函数(解析结果){
var cities={};
var ii=0;
var nResults=parseResults.length

对于(;iI,
results
)是什么类型的对象?它告诉您它没有方法
get
。也许您的意思是
object.city
?哪一行导致了错误?@ppoliani我无法识别错误,因为代码正在Parse.com服务器上运行。@Mathletics results是数组类型。其中的每个对象都是dictionary类型(讲iOS)。我试图返回结果[0]。获取(“城市”)它返回指定对象的城市。为什么提供一个使用特定库的示例?不需要在项目中包含underline.js来迭代数组。获取点。我已将代码段更新为使用vanilla js。此代码仅假设使用现代javascript(ECMAScript 5)其中包括
keys()
方法。
for(var i = 0, length = results.length; i< length; i++){
    var object = results[i];

    var tempArray = [object.get("city")];

    if (cities.length > 0){
        for (var i = 0; i < cities.length; i++){
            if (cities[i].get("city") == object.get("city")) {
                break;
            } else if (i == cities.length-1) {
                cities = cities.concat(tempArray);
            }
        }
    }
}
function(parseResults) {
  var cities = {};
  var ii=0;
  var nResults = parseResults.length
  for(;ii<nResults;++ii) {
    cities[result.get('city')] = 1
  }
  var citiesArray = cities.keys();
  response.success(citiesArray);
}