JSFiddle - React, Tailwind, and code Playground
HTML
<div class="searchBox">
<input type="text">
</div>
<ul>ここに 'name' を表示したい</ul>
JavaScript
/*
* 検索される辞書
***********************/
// 見やすく改行してますが、実際は改行なしです
var jsn = '[{"id":1,"name":"スマホ","relation":"スマホ,スマートフォン,スマートホン"},{"id":2,"name":"スマートフォン","relation":"スマホ,スマートフォン,スマートホン"},{"id":3,"name":"スマートホン","relation":"スマホ,スマートフォン,スマートホン"},{"id":4,"name":"USB","relation":"USB,Universal Serial Bus"},{"id":5,"name":"Universal Serial Bus","relation":"USB,Universal Serial Bus"}]';
var obj = JSON.parse(jsn);
console.log(obj);
/*
* 検索を実行
***********************/
$(document).on( 'input', '.searchBox input', function() {
// 入力値を配列に
const inp = $(this).val();
const searchArr = inp.split(/[\u3000&\x20;]/g);
// 入力値の配列を変換
$.each(searchArr, function(i, v) {
// 後述の関数で変換する
hull2half(v) ? searchArr.push(hull2half(v)) : searchArr;
half2full(v) ? searchArr.push(half2full(v)) : searchArr;
hira2kata(v) ? searchArr.push(hira2kata(v)) : searchArr;
kata2hira(v) ? searchArr.push(kata2hira(v)) : searchArr;
halfkata2fullkata(v) ? searchArr.push(halfkata2fullkata(v)) : searchArr;
});
// チェック
console.log(searchArr);
// リストを表示
let dispArr = [];
if( inp.length ){
// 検索結果を表示
Object.values(obj).forEach(data=>{
if( data['relation'].indexOf(searchArr) != -1 ){
dispArr.push( '<li>' +data['name']+ '</li>' );
}
});
}
else{
// 全て表示
Object.values(obj).forEach(data=>{
dispArr.push( '<li>' +data['name']+ '</li>' );
});
}
$( 'ul' ).html( dispArr );
});
/*
* 検索文字の変換関数たち
***********************/
// 全角英数を半角英数に変換
function hull2half(str) {
if( str.match(/[A-Za-z0-9]/g) ){
return str.replace(/[A-Za-z0-9]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0)-0xFEE0);
});
}
}
// 半角英数を全角英数に変換
function half2full(str) {
if( str.match(/[A-Za-z0-9]/g) ){
return str.replace(/[A-Za-z0-9]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
});
}
}
// ひらがなをカタカナに変換
function hira2kata(str) {
if( str.match(/[ぁ-ん]/g) ){
return str.replace(/[ぁ-ん]/g, function(s) {
return...