比较两个数组的内容,接收“Object#<object>没有方法'indexOf'”</object>的错误

时间:2014-04-14 18:22:25

标签: javascript arrays parse-platform

我尝试做的是返回前两个类别,然后将它们与&#34; userCategory&#34;进行比较。数组,并查看是否有任何匹配的类别。它成功返回前2位,但似乎无法识别userCategory数组。

理想情况下,我想要的是每个用户都有多个userCategory对象实例(一个用于智能手机,一个用于鞋子等)。似乎将其创建为数组可能不正确,因为它没有正确初始化。任何帮助表示赞赏!

完整的错误消息:

Failed with: TypeError: Object #<Object> has no method 'indexOf'
    at main.js:60:33
    at Array.some (native)
    at Object.Parse.Cloud.httpRequest.success (main.js:59:86)
    at Object.<anonymous> (<anonymous>:571:19)

这是我的JS功能:

// Sends search query to eBay

Parse.Cloud.define("eBayCategorySearch", function(request, response) {
          url = 'http://svcs.ebay.com/services/search/FindingService/v1';

  Parse.Cloud.httpRequest({
      url: url,
      params: {     
       'OPERATION-NAME' : 'findItemsByKeywords', 
       'SERVICE-VERSION' : '1.12.0',
       'SECURITY-APPNAME' : '*APP ID GOES HERE*',
       'GLOBAL-ID' : 'EBAY-US',
       'RESPONSE-DATA-FORMAT' : 'JSON',
       'itemFilter(0).name=ListingType' : 'itemFilter(0).value=FixedPrice',
       'keywords' : request.params.item,

     },
      success: function (httpResponse) {


// parses results

          var response = JSON.parse(httpResponse.text);
          var items = [];

          response.findItemsByKeywordsResponse.forEach(function(itemByKeywordsResponse) {
            itemByKeywordsResponse.searchResult.forEach(function(result) {
              result.item.forEach(function(item) {
                items.push(item);
              });
            });
          });


// count number of times each unique primaryCategory shows up (based on categoryId), return top two


          var categoryResults = {};

          items.forEach(function(item) {
            var id = item.primaryCategory[0].categoryId;
            if (categoryResults[id]) categoryResults[id]++;
            else categoryResults[id] = 1;
          });

          var top2 = Object.keys(categoryResults).sort(function(a, b) 
            {return categoryResults[b]-categoryResults[a]; }).slice(0, 2);
          console.log('Top two categories: ' + top2.join(', '));



// compare categoryResults to userCategory object

          var userCategory = {};

          var AnyItemsOfCategoryResultsInUserCategory = Object.keys(categoryResults).some(function(item) {
            return userCategory.indexOf(item) > -1;
          });
          console.log(AnyItemsOfCategoryResultsInUserCategory);

          var ItemsOfCategoryResultsInUserCategory = Object.keys(categoryResults).filter(function(item) {
            return userCategory.indexOf(item) > -1;
          });
          console.log(ItemsOfCategoryResultsInUserCategory);




  },
            error: function (httpResponse) {
                console.log('error!!!');
                console.error('Request failed with response code ' + httpResponse.status);
            }
       });
});

它引用的第60行是这个:

return userCategory.indexOf(item) > -1;

1 个答案:

答案 0 :(得分:1)

您将userCategory定义为一个对象,该方法没有方法indexOf

var userCategory = {}; 

您应该将userCategory声明为数组。

var userCategory = []; 

在您的代码中,categoryResults[id]不会将对象添加到数组中,但它会在您的对象上创建属性。

要将对象添加到数组,您可以使用:

userCategory.push(yourObjectHere)