Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 搜索数组的问题_Javascript_Arrays_String_Node Red - Fatal编程技术网

Javascript 搜索数组的问题

Javascript 搜索数组的问题,javascript,arrays,string,node-red,Javascript,Arrays,String,Node Red,我编写代码来搜索字符串中的关键字并提取所需的数据,但当我尝试在名为“排序”、“标题”和“艺术家”的数组中搜索关键字时,会遇到问题。当我这样做的时候,我得到一个关于潜在无限循环的错误 var type = ['track','tracks','song','songs','album','albums']; var artist = ['created by', 'made by']; var genre = ['genre']; var limit = ['set limit']; var ti

我编写代码来搜索字符串中的关键字并提取所需的数据,但当我尝试在名为“排序”、“标题”和“艺术家”的数组中搜索关键字时,会遇到问题。当我这样做的时候,我得到一个关于潜在无限循环的错误

var type = ['track','tracks','song','songs','album','albums'];
var artist = ['created by', 'made by'];
var genre = ['genre'];
var limit = ['set limit'];
var title = ['title','name'];
var sort = ['sort by', 'classificate by', 'separate by'];
var sortBy = ['popularity'];

// function changeWordsToNumbers(words) {
//         if (msg.numbers[words])
//             return msg.numbers[words];
// }

function searchForIndex(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let search = instruction.search(keywords[i]);
    if (search)
      return search;
  }
  return false;
}


function getSearchResult(wanted) {
    var searchResult = {
            artist : searchForIndex(wanted, artist),
            genre : searchForIndex(wanted, genre),
            limit : searchForIndex(wanted, limit),
            type : searchForIndex(wanted, type),
            title : searchForIndex(wanted, title),
            sort : searchForIndex(wanted, sort),
            sortBy : searchForIndex(wanted, sortBy)
        };
    return searchResult;
}

function removeJunkKeyword(searchResult,instruction) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != - 1) {
                    instruction = instruction.slice(0, searchResult[property] - 1); 
            }
        }
    }
    return instruction;
}

function checkExist(searchResult) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != -1)
                return false;
        }
    }
    return true;
}

function findAndCleanQuery(instruction, keywords) {
        var exist = instruction.search(keywords);
        var result = instruction.slice(exist + keywords.length + 1, instruction.length);
        var searchResult = getSearchResult(result);
        if (exist != -1) {
            if (checkExist(searchResult)) {
                return result;
            } else {
                result = removeJunkKeyword(searchResult,result);
                return result;
            }    
        }
    return false;
}

function searchFor(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let result = findAndCleanQuery(instruction,keywords[i]);
    if (result) 
      return result;
  }
  return false;
}

function searchForType(instruction) {
    for (i = 0; i < type.length; i++) {
        let search = instruction.search(type[i])
        if(search)
            return type[i];
    }
    return false;

}

function searchForKeywords(instruction) {
    msg.artist = searchFor(instruction, artist);
    msg.type = searchForType(instruction, type);
    msg.genre = searchFor(instruction, genre);
    msg.limit = searchFor(instruction, limit);
    msg.title = searchFor(instruction, title);
    msg.sort = searchFor(instruction, sortreg);
}
var msg = {}
msg.instruction = 'Search for me';
searchForKeywords(msg.instruction);
console.log(msg.artist);
console.log(msg.type);
console.log(msg.genre);
console.log(msg.limit);
console.log(msg.title);
console.log(msg.sort);
var type=['track','tracks','song','songs','album','albums'];
var artist=[“创建人”、“制作人”];
var-genre=['genre'];
var limit=[‘设置限制’];
变量title=['title','name'];
var sort=[“排序依据”、“分类依据”、“分隔依据”];
var sortBy=['popularity'];
//函数更改字数(字){
//如果(消息编号[字])
//返回消息。数字[字];
// }
函数searchForIndex(说明、关键字){
对于(i=0;i
代码链接:


注:node red使用对象
msg
在节点之间进行通信。

问题在于,您在几个循环上执行此操作:

for (i = 0; i < keywords.length; i++) {
for(i=0;i
…您应该改为这样做:

for (let i = 0; i < keywords.length; i++) {
for(设i=0;i
如果不使用
let
,变量
i
实际上是全局变量。每次进入新循环时,它都被重置为0,因此它永远无法增加,从而创建了无限循环

var type = ['track','tracks','song','songs','album','albums'];
var artist = ['created by', 'made by'];
var genre = ['genre'];
var limit = ['set limit'];
var title = ['title','name'];
var sort = ['sort by', 'classificate by', 'separate by'];
var sortBy = ['popularity'];

// function changeWordsToNumbers(words) {
//         if (msg.numbers[words])
//             return msg.numbers[words];
// }

function searchForIndex(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let search = instruction.search(keywords[i]);
    if (search)
      return search;
  }
  return false;
}


function getSearchResult(wanted) {
    var searchResult = {
            artist : searchForIndex(wanted, artist),
            genre : searchForIndex(wanted, genre),
            limit : searchForIndex(wanted, limit),
            type : searchForIndex(wanted, type),
            title : searchForIndex(wanted, title),
            sort : searchForIndex(wanted, sort),
            sortBy : searchForIndex(wanted, sortBy)
        };
    return searchResult;
}

function removeJunkKeyword(searchResult,instruction) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != - 1) {
                    instruction = instruction.slice(0, searchResult[property] - 1); 
            }
        }
    }
    return instruction;
}

function checkExist(searchResult) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != -1)
                return false;
        }
    }
    return true;
}

function findAndCleanQuery(instruction, keywords) {
        var exist = instruction.search(keywords);
        var result = instruction.slice(exist + keywords.length + 1, instruction.length);
        var searchResult = getSearchResult(result);
        if (exist != -1) {
            if (checkExist(searchResult)) {
                return result;
            } else {
                result = removeJunkKeyword(searchResult,result);
                return result;
            }    
        }
    return false;
}

function searchFor(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let result = findAndCleanQuery(instruction,keywords[i]);
    if (result) 
      return result;
  }
  return false;
}

function searchForType(instruction) {
    for (i = 0; i < type.length; i++) {
        let search = instruction.search(type[i])
        if(search)
            return type[i];
    }
    return false;

}

function searchForKeywords(instruction) {
    msg.artist = searchFor(instruction, artist);
    msg.type = searchForType(instruction, type);
    msg.genre = searchFor(instruction, genre);
    msg.limit = searchFor(instruction, limit);
    msg.title = searchFor(instruction, title);
    msg.sort = searchFor(instruction, sortreg);
}
var msg = {}
msg.instruction = 'Search for me';
searchForKeywords(msg.instruction);
console.log(msg.artist);
console.log(msg.type);
console.log(msg.genre);
console.log(msg.limit);
console.log(msg.title);
console.log(msg.sort);


作为旁注,您还将注意到,当在第98行中使用时,
sortreg
是未定义的。

问题是您在几个循环中执行此操作:

for (i = 0; i < keywords.length; i++) {
for(i=0;i
…您应该改为这样做:

for (let i = 0; i < keywords.length; i++) {
for(设i=0;i
如果不使用
let
,变量
i
实际上是全局变量。每次进入新循环时,它都被重置为0,因此它永远无法增加,从而创建了无限循环

var type = ['track','tracks','song','songs','album','albums'];
var artist = ['created by', 'made by'];
var genre = ['genre'];
var limit = ['set limit'];
var title = ['title','name'];
var sort = ['sort by', 'classificate by', 'separate by'];
var sortBy = ['popularity'];

// function changeWordsToNumbers(words) {
//         if (msg.numbers[words])
//             return msg.numbers[words];
// }

function searchForIndex(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let search = instruction.search(keywords[i]);
    if (search)
      return search;
  }
  return false;
}


function getSearchResult(wanted) {
    var searchResult = {
            artist : searchForIndex(wanted, artist),
            genre : searchForIndex(wanted, genre),
            limit : searchForIndex(wanted, limit),
            type : searchForIndex(wanted, type),
            title : searchForIndex(wanted, title),
            sort : searchForIndex(wanted, sort),
            sortBy : searchForIndex(wanted, sortBy)
        };
    return searchResult;
}

function removeJunkKeyword(searchResult,instruction) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != - 1) {
                    instruction = instruction.slice(0, searchResult[property] - 1); 
            }
        }
    }
    return instruction;
}

function checkExist(searchResult) {
    for(var property in searchResult) {
        if(searchResult.hasOwnProperty(property)) {
            if(searchResult[property] != -1)
                return false;
        }
    }
    return true;
}

function findAndCleanQuery(instruction, keywords) {
        var exist = instruction.search(keywords);
        var result = instruction.slice(exist + keywords.length + 1, instruction.length);
        var searchResult = getSearchResult(result);
        if (exist != -1) {
            if (checkExist(searchResult)) {
                return result;
            } else {
                result = removeJunkKeyword(searchResult,result);
                return result;
            }    
        }
    return false;
}

function searchFor(instruction, keywords) {
  for (i = 0; i < keywords.length; i++) {
    let result = findAndCleanQuery(instruction,keywords[i]);
    if (result) 
      return result;
  }
  return false;
}

function searchForType(instruction) {
    for (i = 0; i < type.length; i++) {
        let search = instruction.search(type[i])
        if(search)
            return type[i];
    }
    return false;

}

function searchForKeywords(instruction) {
    msg.artist = searchFor(instruction, artist);
    msg.type = searchForType(instruction, type);
    msg.genre = searchFor(instruction, genre);
    msg.limit = searchFor(instruction, limit);
    msg.title = searchFor(instruction, title);
    msg.sort = searchFor(instruction, sortreg);
}
var msg = {}
msg.instruction = 'Search for me';
searchForKeywords(msg.instruction);
console.log(msg.artist);
console.log(msg.type);
console.log(msg.genre);
console.log(msg.limit);
console.log(msg.title);
console.log(msg.sort);


作为旁注,您还会注意到,当在第98行中使用时,
sortreg
是未定义的。

谢谢!当指令使用“分类依据”而不是“排序依据”时,我也有问题。当我这样做时,这段代码不会纠正剪切查询。我认为这是循环中的问题,但我整天坐着找不到解决方案。谢谢!当指令使用“分类依据”而不是“排序依据”时,我也有问题。当我这样做时,这段代码不会纠正剪切查询。我认为这是循环中的问题,但我整天坐着找不到解决方案