2016-06-21 48 views
0

我刚刚打开算法解锁书,我试图在Javascript中实现它们用于线性搜索的线性搜索的伪代码。在Javascript中实现线性搜索算法

这里是我的代码

var answer = 'not found'; 

function LinearSearch(A,n,searchQuery) { 
    for (var i = 0; i < A.length; i++) { 
    if A[i] === value { 
     answer = i; 
    } 
    } 
} 

var names = ["Jack", "Molly", "Tristan", "Jacob", "Steph"] 

console.log(LinearSearch(names, names.length, "Jacob")); 

我想知道我在做什么错在这里。

+0

缺少'()'因为如果状态,但不是从功能 –

回答

0

试试这个:

var answer = 'not found'; 
 

 
function LinearSearch(A,n,searchQuery) { 
 
    for (var i = 0; i < n; i++) { 
 
    if(A[i] === searchQuery) { 
 
     return i 
 
    } 
 
    } 
 
    return answer 
 
} 
 

 
var names = ["Jack", "Molly", "Tristan", "Jacob", "Steph"] 
 

 
console.log(LinearSearch(names, names.length, "Jacob"));

语法错误:

5号线:变化if A[i] === valueif(A[i] === searchQuery)

函数必须返回财产以后。

编辑

您可以使用短代码indexOf()方法。

var names = ["Jack", "Molly", "Tristan", "Jacob", "Steph"] 
 
function LinearSearch(name){ 
 
    return names.indexOf(name) !== -1 ? names.indexOf(name) : 'not found' 
 
} 
 
console.log(LinearSearch("Tristan"))

+0

返回任何值怎么来的,你只有做了'回报我'?当if语句为true并且跳过返回“答案”行时,该函数是否会停止执行? – roadtocode

+0

'answer = i;返回答案;'它与'return i'(第二个更好)相同,是的,一旦循环找到它返回索引的名字('i'),那么函数停止运行。 – Gintoki

1

有在你的代码有问题的几个问题:

值没有定义
  • ,最有可能你想使用SEARCHQUERY
  • 缺少括号。如果A [ i] ===值(一个语法错误)
  • n从未使用(所以我已经删除了下面的代码)
  • 缺少return语句

function linearSearch(data, searchQuery) { 
 
     var answer = 'not found'; 
 
     for (var i = 0, len = data.length; i < len; i++) { 
 
     if (data[i] === searchQuery) { 
 
      answer = i; 
 
     } 
 
     } 
 
     return answer; 
 
    } 
 

 
    var names = ["Jack", "Molly", "Tristan", "Jacob", "Steph"] 
 
    var result = linearSearch(names, "Jacob"); 
 
    console.log(result);

替代你可以使用indexOf()以及张贴由约翰。 或者你可以使用更具有异国情调的方法使用findIndex()

findIndex()当您有一个对象数组并且需要获取索引my和object属性时特别有用。您也可以使用forEach()使用相同的结果。

例使用findIndex():

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

function findIndexByName(data, name) { 
 
    var result = data.findIndex(function(element, index, array) { 
 
    if (element=== name) { 
 
\t  return true; 
 
    } 
 
    return false; 
 
    }); 
 
    return result; 
 
} 
 
var data = ["Jack", "Molly", "Tristan", "Jacob", "Steph"]; 
 
var result = findIndexByName(data, "Jacob"); 
 
console.log(result);