当前位置: 首页 > 知识库问答 >
问题:

无法读取未定义的属性“score”

孙项禹
2023-03-14

我知道这方面还有很多类似的问题,但没有一个答案是有效的。在我的例子中,我有下面的代码,我正在尝试按分数降序排列记录数组。

function score(string, pattern){
  string = string.toLowerCase();
  pattern = pattern.toLowerCase();

  var position = 0;
  var count = 0;
  while (true) {
    var index = string.indexOf(pattern, position);
    if (index == -1) break;
    count++;
    position = index + 1;
  }
  return(count);
}

function urlScores(web, pattern){
  var records = {};
  var results = [];
  var n = 0;
  for(var i = 0; i < web.length; i++){
    n = score(web[i].content, pattern);
    if(n != 0){
      records.url = web[i].url;
      records.score = n;
      results[results.length] = {url: records.url, score: records.score};
    }
  }
  return(JSON.stringify(results));
}

function rankedScores(web, pattern){
  results = JSON.parse(urlScores(web, pattern));
  var temp = 0;
  var tempUrl = '';
  while(counter < results.length){
    for(var i in results){
      numbers[numbers.length] = results[i].score;
      if(results[i].score < results[i + 1].score){
        temp = results[i].score;
        tempUrl = results[i].url;
        results[i] = {url: results[i+1].url, score: results[i+1].score};
        results[i + 1] = {url: tempUrl, score: temp};
      }
    }
    counter++;
  }
  alert(JSON.stringify(results));
}

最后一个函数是什么给我的问题.如果用户运行以下:

var web=[{url:“www.southanpton.ac.uk”,内容:“南安普敦大学提供学位课程和世界一流的研究测试。”,{url:“www.xyz.ac.uk”,内容:“另一种大学考试”},{url:“www”,内容:“另一种大学考试”};

RankedScores(web,'test');

它应该以降序输出相同的数组。相反,我得到了一个无法读取的未定义属性“score”。有人能看出我哪里出了错吗
谢谢
另外,我们不允许使用。排序()!

共有3个答案

慕仲渊
2023-03-14

这一行:

if(results[i].score < results[i + 1].score){

对于数组中的最后一个元素,结果[i 1]将不存在。尝试添加其他条件以捕获该情况:

if(typeof results[i + 1] != 'undefined' && results[i].score < results[i + 1].score){
罗毅
2023-03-14

rankedScores中,您使用的是结果[i 1]。如果,则在中得分,但如果没有结果的此类元素(因为i是最后一个的索引),则会得到描述的错误。

井学
2023-03-14
function rankedScores(web, pattern){
  var results = JSON.parse(urlScores(web, pattern));
  var temp = 0;
  var tempUrl = '';
  var counter = 0;
  var numbers = [], i, len = results.length;

  while (counter < results.length){
    for (i = 0; i < len - 1; i++){
      numbers[numbers.length] = results[i].score; /// ???? 

      if (results[i].score < results[i + 1].score){
        temp    = results[i].score;
        tempUrl = results[i].url;

        results[i]     = {url: results[i+1].url, score: results[i + 1].score};
        results[i + 1] = {url: tempUrl, score: temp};
      }
    }

    counter++;
  }

  alert(JSON.stringify(results));
}
 类似资料:
  • 为什么我得到这个错误不能读取未定义的触摸属性? 为什么它不能读取,但它可以读取 当我们使用

  • 问题内容: 我正在制作非常简单的react应用。但是,当我尝试通过onChange事件调用父(实际上是祖父母)组件的方法时,我一直在获取。 这是触发事件的组件/表单(因此,在绑定的父组件上调用方法…是的,因为我通过道具将其从父组件传递下来,所以在方法上使用了.bound(this)。) 这是我如何通过大多数父(祖父母)组件中的props传递该方法的方法。 这是我作为父项(方法所有者和方法调用程序之

  • 我正在测试发送电子邮件与流星js和nodemailer插件: 流星添加捷运:流星NodeEmailer 当页面加载时,我在导航器的控制台上看到错误:无法读取未定义的属性“创建运输”。 那么问题是什么呢? 代码如下: /////////////////////////////////////////// ///////////////

  • 我一直试图让firebase与react一起工作,但出现了此错误 未经处理的拒绝(TypeError):无法读取未定义的fetch D:/Peti/Programming/node/coursewebpage/src/components/coursePage.js:12 9 | const db=firebase.firestore()10 | const myAuthLevel=(fireba

  • 这是我的猫鼬模式: 这是使用Express的Node.js服务器。它具有路由,如果触发该路由,它将使用请求中传递的信息更新用户的购物车。正文: 我打印到终端userCart,正如您在代码中看到的,它返回给我的是: 当服务器执行时,它返回以下错误: 如果我已经在Mongoose中定义了的结构,为什么不定义它?

  • 请注意,我在react ProductScreen.js中呈现动态数据时有问题 注意,...数据在product.js中呈现得很好,但相同的数据在productscreen.js中不会呈现,因为productscreen.js链接是通过“id”呈现的。 谢谢app.js 导入“./homescreen.css”;从'../Components/Product'导入产品从'React'导入{useE