<!doctype html> <title>name hint</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf-8"> <!-- <script src="name-hint.js"></script> --> <input type="text" id="name_input" oninput="update_name_hint(event.target)"> <pre id="hints"></pre> <script> // name-hint.js var test_suite=[ "name1 name2", "name2", "name1", "name1 name2 name3", ] function get_hints(input){ var results = test_suite.filter(_=>_.startsWith(input)) return results } //console.log(common_beginning(test_suite)) function common_beginning(string_list){ var common="" var index=0 if(string_list[0]===undefined) return common while(true){ var reference=string_list[0][index] if(reference===undefined) return common for(var current of string_list){ var got=current[index] if(got===undefined) return common if(got!=reference) return common } common+=reference index+=1 } return common } </script> <script> var previous_hints_length var previous_content="" update_name_hint(document.getElementById("name_input")) function update_name_hint(target){ var hints=get_hints(target.value) if(hints.length==0){ document.getElementById("hints").innerText="(no hints)" previous_content=target.value return } var common_begin = common_beginning(hints) if(target.value.length>=previous_content.length) target.value = common_begin hints=get_hints(target.value) if(previous_hints_length>1 && hints.length==1) target.value=hints[0] previous_hints_length=hints.length document.getElementById("hints").innerText=hints.join("\n") previous_content=target.value } </script>